1.spring security认证流程
Spring Security中进行身份验证的是AuthenticationManager接口,ProviderManager是它的一个默认实现,但它并不用来处理身份认证,而是委托给配置好的AuthenticationProvider,每个AuthenticationProvider会轮流检查身份认证。检查后或者返回Authentication对象或者抛出异常。
验证身份就是加载响应的UserDetails,看看是否和用户输入的账号、密码、权限等信息匹配。此步骤由实现AuthenticationProvider的DaoAuthenticationProvider(它利用UserDetailsService验证用户名、密码和授权)处理。包含 GrantedAuthority 的 UserDetails对象在构建 Authentication对象时填入数据。
身份认证的调用流程图如下
2. AuthorizationServerConfigurerAdapter讲解
Spring传入AuthorizationServerConfigurer中:
- ClientDetailsServiceConfigurer:用来配置客户端详情服务(ClientDetailsService),客户端详情信息在这里进行初始化,你能够把客户端详情信息写死在这里或者是通过数据库来存储调取详情信息。
- AuthorizationServerSecurityConfigurer:用来配置令牌端点(Token Endpoint)的安全约束.
- AuthorizationServerEndpointsConfigurer:用来配置授权(authorization)以及令牌(token)的访问端点和令牌服务(token
services)。
参考链接
3.授权服务器端点开启
spring security oauth2 中的 endpoint(聊聊spring security oauth2的几个endpoint的认证)
- /oauth/authorize(授权端,授权码模式使用)
- /oauth/token(令牌端,获取 token)
- /oauth/check_token(资源服务器用来校验token) /oauth/confirm_access(用户发送确认授权)
- /oauth/error(认证失败) /oauth/token_key(如果使用JWT,可以获的公钥用于 token 的验签)
- /oauth/token_key 提供公有密匙的端点,如果你使用JWT令牌的话
allowFormAuthenticationForClients作用:主要是让/oauth/token支持client_id以及client_secret作登录认证
对应代码:
public void configure(AuthorizationServerSecurityConfigurer oauthServer) {
oauthServer
.passwordEncoder(new BCryptPasswordEncoder())
// 开启/oauth/token_key验证端口无权限访问
.tokenKeyAccess("permitAll()")
// 开启/oauth/check_token验证端口认证权限访问,配置资源服务器可以权限校验
.checkTokenAccess("isAuthenticated()")
.allowFormAuthenticationForClients();
}
默认是关闭
4.springsecurity相关方法
http.authorizeRequests()其中这里的意思是指通过authorizeRequests()方法来开始请求权限配置
第一部分是formLogin配置段,用于配置登录验证逻辑相关的信息。如:登录页面、登录成功页面、登录请求处理路径等。
第二部分是authorizeRequests配置端,用于配置资源的访问权限。如:开发登录页面的permitAll开放访问,“/biz1”(业务一页面资源)需要有资源ID为"biz1"的用户才可以访问
**jwkSetUri:**用于从授权服务器(包含用于验证ID令牌的JSON Web签名(JWS)和可选的UserInfo响应)的加密密钥中检索JSON Web密钥(JWK)的URI