在授权服务器初体验笔记中罗列了几种存储token的方式。这一篇重点介绍一下授权码模式的配置方式。
授权码模式需要通过/oauth/authorize端点去获取code,之后拿着code去oauth/token端点去获取token。官方文档中唯一提示我们的地方,就是上面截图。它说如果你想要使用/oatuh/authorize端点就必须被认证。认证的方式是使用SpringSecurity进行认证。于是自然是需要配置一套SpringSecurity。
1.操作步骤
1.依赖的引入
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-oauth2</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
2.客户端配置
@Configuration
@EnableAuthorizationServer
public class AuthServerConfig implements AuthorizationServerConfigurer {
@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
}
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
// @formatter:off
clients.inMemory().withClient("gaoxi")
.secret("{noop}123456")
.scopes("read","write")
.authorizedGrantTypes("password","refresh_token",
"authorization_code","implicit","client_credentials")
.redirectUris("http://www.baidu.com");
// @fomatter:on
}
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
}
}
3.SpringSecurity代码配置
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
@Override
public UserDetailsService userDetailsService() {
UserDetails user =
User.builder()
.username("gaoxi")
.password("{noop}123456")
.roles("USER")
.build();
return new InMemoryUserDetailsManager(user);
}
}
4.浏览器输入一下地址:会弹出一下页面
5.输入密码后弹出以下页面
6.自动跳转到百度后,取连接的code
7.通过postman获取access_token
2.小结
授权码模式会自动返回refreshToken和AccessToken。以上代码使用password模式是不可以的。因为官方:
只有当authenticationManager被注入后才可以使用password方式。
如果尝试的话会返回如下信息:
下篇文章就配置使用Password模式。