OAuth(开放授权)是一个开放标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方应用或分享他们数据的所有内容。OAuth的服务的提供方涵盖了两个服务 ,即授权服务和资源服务;
授权服务包含对接入端和用户的合法性进行验证并颁发token等功能,
如何配置授权服务呢?
第一步:准备一个springcloud项目并引入oAuth2的依赖
<!-- oAuth2 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-oauth2</artifactId>
<version>2.0.2.RELEASE</version>
</dependency>
第二步:配置授权服务,这里会实现oAuth2提供的AuthorizationServerConfigurerAdapter接口,并实现里面主要的三个方法来实现授权服务的配置,需要实现方法如下图:
详细授权服务的配置步骤 如下:
-
2.1:在配置类上面指定
@EnableAuthorizationServer
注解 -
2.2:
ClientDetailsServiceConfigurer
客户端的配置,也就是需要认证的第三方服务信息,之后会配置在数据库,下面代码就是配置的一个用户的详细信息
/**
* 配置一
* 配置客户端的详细信息,也就是需要认证的第三方服务
* @param clients
* @throws Exception
*/
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
//基于内存的客户端配置方式,以后改为数据库
clients.inMemory()
//客户端的ID
.withClient("clientid_1")
//客户端可以访问的资源列表
.resourceIds("demo_resource_1","demo_resource_2")
//客户端的密钥
.secret(new BCryptPasswordEncoder().encode("123456"))
//oAuth2.0支持的五种授权类型
.authorizedGrantTypes("password","client_credentials","authorization_code","implicit","refresh_token")
//允许授权的范围
.scopes("all")
//false:授权码模式,授权的是后跳转到授权页面 ,true:不跳转,直接发送令牌
.autoApprove(false)
//验证回调地址
.redirectUris("http://www.baidu.com");
}
- 2.3:
AuthorizationServerEndpointsConfigurer
用来配置令牌的管理,比如时长,以及令牌的端点
2.3.1首先配置令牌的储存方式(基于内存的存储)
@Configuration
public class TokenStoreConfig {
/**
* 令牌的存储策列(基于内存的存储)生成普通令牌,后面可用jwt
* @return
*/
@Bean
public TokenStore tokenStore(){
return new InMemoryTokenStore();
}
}
2.3.2 配置令牌的规则 (tokenStore就是上一步2.3.1的令牌储存策列)
//自定义的令牌储存规则 2.3.1
@Autowired
private TokenStore tokenStore;
@Autowired
private ClientDetailsService clientDetailsService;
/**
* 配置令牌的管理以及规则
* @return
*/
@Bean
public AuthorizationServerTokenServices tokenServices(){
DefaultTokenServices service = new DefaultTokenServices();