在授权服务器初体验笔记中罗列了几种存储token的方式。这一篇重点介绍一下授权码模式的配置方式。

image.png

授权码模式需要通过/oauth/authorize端点去获取code,之后拿着code去oauth/token端点去获取token。官方文档中唯一提示我们的地方,就是上面截图。它说如果你想要使用/oatuh/authorize端点就必须被认证。认证的方式是使用SpringSecurity进行认证。于是自然是需要配置一套SpringSecurity。

1.操作步骤

1.依赖的引入

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-oauth2</artifactId>
  4. <version>2.2.5.RELEASE</version>
  5. </dependency>

2.客户端配置

  1. @Configuration
  2. @EnableAuthorizationServer
  3. public class AuthServerConfig implements AuthorizationServerConfigurer {
  4. @Override
  5. public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
  6. }
  7. @Override
  8. public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
  9. // @formatter:off
  10. clients.inMemory().withClient("gaoxi")
  11. .secret("{noop}123456")
  12. .scopes("read","write")
  13. .authorizedGrantTypes("password","refresh_token",
  14. "authorization_code","implicit","client_credentials")
  15. .redirectUris("http://www.baidu.com");
  16. // @fomatter:on
  17. }
  18. @Override
  19. public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
  20. }
  21. }

3.SpringSecurity代码配置

  1. @Configuration
  2. @EnableWebSecurity
  3. public class SecurityConfig extends WebSecurityConfigurerAdapter {
  4. @Bean
  5. @Override
  6. public UserDetailsService userDetailsService() {
  7. UserDetails user =
  8. User.builder()
  9. .username("gaoxi")
  10. .password("{noop}123456")
  11. .roles("USER")
  12. .build();
  13. return new InMemoryUserDetailsManager(user);
  14. }
  15. }

4.浏览器输入一下地址:会弹出一下页面
image.png
5.输入密码后弹出以下页面
image.png

6.自动跳转到百度后,取连接的code
image.png

7.通过postman获取access_token
image.png

2.小结

授权码模式会自动返回refreshToken和AccessToken。以上代码使用password模式是不可以的。因为官方:

image.png

只有当authenticationManager被注入后才可以使用password方式。
如果尝试的话会返回如下信息:
image.png
下篇文章就配置使用Password模式。