/oauth/authorize:授权端点。
/oauth/token:令牌端点。
/oauth/confirm_access:用户确认授权提交端点。
/oauth/error:授权服务错误信息端点。
/oauth/check_token:用于资源服务访问的令牌解析端点。
/oauth/token_key:提供公有密匙的端点,如果你使用JWT令牌的话。
AuthorizationServerConfigurerAdapter
- AuthorizationServerConfigurerAdapter 类中3个不同的configure方法分别
- configure(ClientDetailsServiceConfigurer clients) 用来配置客户端详情服务(ClientDetailsService),客户端详情信息在这里进行初始化,你能够把客户端详情信息写死在这里或者是通过数据库来存储调取详情信息;
- configure(AuthorizationServerEndpointsConfigurer endpoints) 用来配置授权(authorization)以及令牌(token)的访问端点和令牌服务(token services),还有token的存储方式(tokenStore);
- configure(AuthorizationServerSecurityConfigurer security) 用来配置令牌端点(Token Endpoint)的安全约束;
ClientDetailsServiceConfigurer 主要有俩种方式存储客户端详情信息
- 第一种 InMemoryClientDetailsServiceBuilder存放在内存当中 - 第二种呢 JdbcClientDetailsServiceBuilder 存在在数据库当中 - 其实还有第三种 继承JdbcClientDetailsService 重新里面的方法 已达到第三方存储的目的。重写方法里面 可以是redis、文件、oss。
AuthorizationServerEndpointsConfigurer
- authenticationManager:认证管理器,当你选择了资源所有者密码(password)授权类型的时候,请设置这个属性注入一个 AuthenticationManager 对象。
- userDetailsService:如果啊,你设置了这个属性的话,那说明你有一个自己的 UserDetailsService 接口的实现,或者你可以把这个东西设置到全局域上面去(例如 GlobalAuthenticationManagerConfigurer 这个配置对象),当你设置了这个之后,那么 "refresh_token" 即刷新令牌授权类型模式的流程中就会包含一个检查,用来确保这个账号是否仍然有效,假如说你禁用了这个账户的话。
- authorizationCodeServices:这个属性是用来设置授权码服务的(即 AuthorizationCodeServices 的实例对象),主要用于 "authorization_code" 授权码类型模式。
- implicitGrantService:这个属性用于设置隐式授权模式,用来管理隐式授权模式的状态。
- tokenGranter:当你设置了这个东西(即 TokenGranter 接口实现),那么授权将会交由你来完全掌控,并且会忽略掉上面的这几个属性,这个属性一般是用作拓展用途的,即标准的四种授权模式已经满足不了你的需求的时候,才会考虑使用这个。
AuthorizationServerSecurityConfigurer
WebSecurityConfigurerAdapter
- configure(HttpSecurity http) httpSecurity中配置所有请求的安全验证
- 注入Bean UserDetailsService
- 注入Bean AuthenticationManager 用来做验证
- 注入Bean PasswordEncoder
AuthenticationSuccessHandler
实现自定义的用户成功登陆处理,只需要实现AuthenticationSuccessHandler接口即可;这个接口的实现方法里面有个Authentication
AbstractAuthenticationProcessingFilter
是一个抽象类,主要的功能是身份认证。OAuth2ClientAuthenticationProcessingFilter(Spriing OAuth2)、RememberMeAuthenticationFilter(RememberMe)都继承了 AbstractAuthenticationProcessingFilter ,并重写了方法 attemptAuthentication 进行身份认证。 这样我们就可以自定义对外暴露的接口路径进行自己的验证规则
- 构造方法String defaultFilterProcessesUrl 对外暴露的请求路径
- 构方法AntPathRequestMatcher 对象注入
- AntPathRequestMatcher(String 路径, String httpMethod)这样来控制对外暴露的接口路径 和 httpMethod
- attemptAuthentication方法主要是身份的认证看一下 ClientCredentialsTokenEndpointFilter实现代码
如何喜欢可以关注分享本公众号。
file
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。转载请附带公众号二维码