1、Oauth2通过管理和验证令牌将受保护的资源暴露出去。
2、OAuth2提供者其实是分成授权服务和资源服务两个角色,可以在一个应用程序或多个应用程序中,也可以有选择的给授权服务配置多个资源服务。
运行流程:
- 用户打开客户端以后,客户端要求用户给予授权
- 用户同意给予客户端授权
- 用户端使用获取的授权向认证服务器申请令牌。
- 认证服务器对客户端进行认证以后,确认无误,同意发放令牌。
- 客户端使用令牌,向资源服务器申请获取资源。
- 资源服务器确认令牌无误,同意向客户端开发资源。
3、获取令牌的请求是由Spring MVC的控制器来处理的,访问受保护的资源是通过标准的spring请求过滤器来处理的。
4、url
- /oauth/authrize 用于授权服务请求
- /oauth/token 用于获取访问令牌
- /oauth/confirm_access 用户发送确认授权到这里
- /oauth/error 用户呈现授权服务器授权出错的请求
5、OAuth2AuthenticationProcessingFilter 用于加载请求提供的一个授权了的访问令牌是否有效
6、配置授权服务器:
OAuth客户端通过将终端用户导向一个可以输入证书/口令的授权验证页面来获取授权码,然后讲授权码传递给授权服务器,服务器验证后重定向页面
@EnableAuthorizationServer
继承AuthorizationServerConfigurerAdapter类(实现AuthorizationServerConfigure接口)
1)ClientDetailsServiceConfigurer:定义了客户端细节服务,可以用来定义一个基于内存的或者jdbc的客户端信息服务。
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
}
客户端对象的重要属性:
clientid(客户端id)、secret(客户端的私密信息)、scope(客户端的作用域)、authorizedGrantTypes(授权给客户端使用的权限类型)authorities(授权给客户端的权限)
2)AuthorizationServerSecurityConfigurer:在令牌端点上定义了安全约束。
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
}
3)AuthorizationServerEndpointsConfigurer:定义了授权和令牌端点和令牌服务
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
}
AuthorizationServerTokenServices:
注意:创建一个令牌时必须保存权限信息,这样后续令牌才可以引用它。访问令牌用于加载创建令牌时的授权信息。
DefaultTokenServices实现类使用随机值创建令牌,并处理永久令牌(TokenStore类处理)以外的所有令牌。
令牌存储方式:
InMemoryTokenStore(默认)对于一个单服务器场景非常使用 JdbcTokenStore:适用于服务器共享数据库或者同一个服务器有多个实例或授权服务器资源服务器有多个组件
JwkTokenStore:可以加密所有令牌授权访问的数据,不需要在后台存储。但是不能方便的撤销一个已授权的令牌,撤销授权的操作在刷新令牌中进行。而且存储的令牌数据会越来越大,因 为令牌里面存储了大量的数据证书信息。
授权类型:
AuthenticationManager 密码授予
AuthorizationCodeServices 授权码服务