在授权服务器初体验笔记中罗列了几种存储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@EnableAuthorizationServerpublic class AuthServerConfig implements AuthorizationServerConfigurer {@Overridepublic void configure(AuthorizationServerSecurityConfigurer security) throws Exception {}@Overridepublic void configure(ClientDetailsServiceConfigurer clients) throws Exception {// @formatter:offclients.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}@Overridepublic void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {}}
3.SpringSecurity代码配置
@Configuration@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter {@Bean@Overridepublic 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模式。


