本文以最简配置搭建一个授权服务,让大家初步了解授权服务及相关表。
token 存于数据库中
例子基于Spring Boot 2.1.7.RELEASE ,使用mysql数据库
参考资源: Authorization Server Configuration
- 添加一个实现了
AuthorizationServerConfigurer
接口的实现类且使用@EnableAuthorizationServer
注解进行标注
AuthorizationServerConfigurer
接口的实现类是AuthorizationServerConfigurerAdapter
,这里我们继承AuthorizationServerConfigurerAdapter
/**
* Created by liuquan on 2019/8/11.
*/
@Configuration
@EnableAuthorizationServer
public class CustomAuthorizationServerConfigurer extends AuthorizationServerConfigurerAdapter {
@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
}
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
}
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
}
}
@EnableAuthorizationServer
注解会导入两个配置类AuthorizationServerEndpointsConfiguration
、AuthorizationServerSecurityConfiguration
- 我们来看看
AuthorizationServerEndpointsConfiguration
这个配置类
init()
会调用AuthorizationServerConfigurer
接口中的configure(AuthorizationServerEndpointsConfigurer endpoints)
方法,稍后我们将重写该方法
这里可以看出,如果我们没有为AuthorizationServerEndpointsConfigurer
设置tokenService
属性,则默认使用DefaultTokenServices
从上图可以看到DefaultTokenServices
中设置了TokenStore
对象,那TokenStore
是做什么用的呢?
Persistence interface for OAuth2 tokens.
从代码中的注释可以知道TokenStore
是:OAuth2 令牌的持久化接口。其实现类有多个,如下图:
如果没有为AuthorizationServerEndpointsConfigurer
对象设置tokenStore
属性,则默认采用JwtTokenStore
或InMemoryTokenStore
,本例子采用数据库存储token,故重写AuthorizationServerConfigurer
接口中的configure(AuthorizationServerEndpointsConfigurer endpoints)
方法设置tokenStore
@Configuration
@EnableAuthorizationServer
public class CustomAuthorizationServerConfigurer extends AuthorizationServerConfigurerAdapter {
@Autowired