zoukankan      html  css  js  c++  java
  • springsecurity basic 认证

    Basic Access Authentication scheme是在HTTP1.0提出的认证方法,它是一种基于challenge/response的认证模式,针对特定的realm需要提供用户名和密码认证后才可访问,其中密码使用明文传输。

    Basic 认证是HTTP 中非常简单的认证方式,因为简单,所以不是很安全,不过仍然非常常用。

    Basic模式认证过程如下:

    ①浏览器发送http报文请求一个受保护的资源。

    ②服务端的web容器将http响应报文的响应码设为401,响应头部加入WWW-Authenticate: Basic realm=”xxx”。

    ③浏览器会弹出默认对话框让用户输入用户名和密码,并用Base64进行编码,实际是用户名+冒号+密码进行Base64编码,即Base64(username:password),然后浏览器就会在HTTP报文头部加入这个编码,形如:Authorization: Basic YWRtaW46YWRtaW4=

    ④服务端web容器获取HTTP报文头部相关认证信息,匹配此用户名与密码是否正确,是否有相应资源的权限,如果认证成功则返回相关资源,否则再执行②,重新进行认证。

    ⑤以后每次访问都要带上认证头部。

    Basic认证的优点是基本上所有流行的网页浏览器都支持,一般被用在受信赖的或安全性要求不高的系统中(如路由器配置页面的认证,tomcat管理界面认证)

    缺点是,用户名密码基本等于是明文传输带来很大风险,并且没有注销认证信息的手段,只能依靠关闭浏览器退出认证。

    springsecurity中处理basic认证的是spring-security-web-4.1.2.RELEASE 中的org.springframework.security.web.authentication.www.BasicAuthenticationFilter。

    核心代码如下:

           //获取报文头部的Authorization: Basic YWRtaW46YWRtaW4= ,判断是否是basic认证
         String header = request.getHeader("Authorization"); if (header == null || !header.startsWith("Basic ")) { chain.doFilter(request, response); return; } try { String[] tokens = extractAndDecodeHeader(header, request); assert tokens.length == 2; String username = tokens[0];if (authenticationIsRequired(username)) {
              //解码后取出用户名密码生成spring-security的认证对象 UsernamePasswordAuthenticationToken authRequest
    = new UsernamePasswordAuthenticationToken( username, tokens[1]); authRequest.setDetails( this.authenticationDetailsSource.buildDetails(request)); Authentication authResult = this.authenticationManager .authenticate(authRequest); if (debug) { this.logger.debug("Authentication success: " + authResult); }           //认证结果设置到SecurityContext中 SecurityContextHolder.getContext().setAuthentication(authResult); this.rememberMeServices.loginSuccess(request, response, authResult); onSuccessfulAuthentication(request, response, authResult); } }

    以上就是basic认证和spring-security中的拦截方式。

  • 相关阅读:
    idea快捷键
    cas的缺点
    mybatis plus 实现逻辑删除
    mybatis plus的条件查询
    POI写非常大的数据量时
    POI中HSSF和XSSF
    JMM是什么
    Android面试收集录10 LruCache原理解析
    Android面试收集录9 IntentService详解
    Android面试收集录8 HandlerThread详解
  • 原文地址:https://www.cnblogs.com/1xin1yi/p/7386122.html
Copyright © 2011-2022 走看看