首先要做一件事。OAuth 2 是一个授权框架。它允许应用程序(客户端)代表资源所有者(用户)获取对 HTTP 服务的有限访问权限。OAuth 2 不是身份验证协议。
AuthorizationServerConfigurerAdapter 用于配置 OAuth 授权服务器的工作方式。
以下是一些可以配置的方面:
- 支持的授权类型(例如授权代码授予)
- 授权码服务,用于存储授权码
- 令牌存储,用于存储访问和刷新令牌(例如 JwtTokenStore)
- 客户端详细信息服务,用于保存客户端配置
- ...
WebSecurityConfigurerAdapter 用于配置 OAuth 授权服务器的安全方式。
换句话说,用户必须如何进行身份验证才能授予客户端对其资源的访问权限。
这可以是:
- 表单身份验证
- 通过身份提供商进行身份验证(Facebook登录)
- ...
(我故意省略了一些细节,以使答案尽可能简单。
具有内存中令牌存储的授权服务器配置示例:
@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints.tokenStore(tokenStore());
}
@Bean
public TokenStore tokenStore() {
return new InMemoryTokenStore();
}
...
}
表单登录的安全配置示例:
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/login").permitAll()
.antMatchers("/oauth/authorize").authenticated()
.and()
.formLogin();
}
...
}