Java 我需要带Spring Security OAuth2的资源服务器吗?
我正在尝试用JWT令牌实现OAuth2身份验证。若我理解,我需要将凭据发送到授权服务器,这将验证我的凭据,并返回已签名的JWT令牌。接下来,我尝试实现Java 我需要带Spring Security OAuth2的资源服务器吗?,java,spring,spring-security,jwt,spring-security-oauth2,Java,Spring,Spring Security,Jwt,Spring Security Oauth2,我正在尝试用JWT令牌实现OAuth2身份验证。若我理解,我需要将凭据发送到授权服务器,这将验证我的凭据,并返回已签名的JWT令牌。接下来,我尝试实现WebSecurityConfig,它扩展了WebSecurityConfigurerAdapter,在那里我必须设置哪些端点是安全的,哪些不是 但我的问题是:我需要资源服务器吗?它与我潜在的网站安全配置的功能相同,还是不同 我的目标是为我的网站创建简单的JWT身份验证 是的,您需要通过扩展ResourceServerConfigurerAdapt
WebSecurityConfig
,它扩展了WebSecurityConfigurerAdapter
,在那里我必须设置哪些端点是安全的,哪些不是
但我的问题是:我需要资源服务器吗?它与我潜在的网站安全配置
的功能相同,还是不同
我的目标是为我的网站创建简单的JWT身份验证 是的,您需要通过扩展
ResourceServerConfigurerAdapter
来配置JWT保护的资源。基本实现可能如下所示
@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
}
这意味着您不需要扩展websecurityConfigureAdapter
,因为上述配置配置了与您将在websecurityConfigureAdapter
中配置的HttpSecurity
对象相同的。public-void-configure(HttpSecurity-http)
在两个类中的作用相同
我们之所以选择ResourceServerConfigurerAdapter
而不是WebSecurityConfigureAdapter
,是因为它是您正在使用的spring-security-oauth2模块的一部分,框架将在后台使用它
当然,您需要确保对授权服务器和资源服务器使用相同的签名密钥。如果在同一应用程序中定义安全配置bean,资源服务器将自动使用相同的bean,如果没有,那么您将需要复制授权服务器上与JWT相关的任何配置。我将尝试用一个例子来回答:假设您想编写一个很棒的web应用程序,它可以以某种方式同时管理GMAIL帐户和谷歌日历数据。显然,你的用户必须使用他们的谷歌证书登录,这样你的应用程序才能获取并管理他们的数据。您的应用程序管理用户的数据,而不获取用户的凭据
到目前为止还不错
在本例中,授权服务器是Google帐户。资源服务器是Google Main和Google Calendar(两者都是),而客户端是您的应用程序
希望这是有意义的。您需要资源服务器,因为它是:
资源服务器
承载受保护资源的服务器,能够接受
以及使用访问令牌响应受保护的资源请求
因此,它也是SpringSecurityOAuth2的一部分
资源服务器配置不仅仅是一种安全配置,请参阅:
资源服务器配置
资源服务器(可以与授权服务器或单独的应用程序相同)为受OAuth2令牌保护的资源提供服务。SpringOAuth提供了实现此保护的Spring安全身份验证过滤器。您可以在@Configuration
类上使用@enableSourceServer
将其打开,并使用ResourceServerConfigurer
对其进行配置(如有必要)。可以配置以下功能:
- tokenServices:定义令牌服务的bean(ResourceServerTokenServices的实例)
- resourceId:资源的id(可选,但建议使用,如果存在,将由身份验证服务器验证)
- ResourceCS服务器的其他扩展点(例如,用于从传入请求中提取令牌的令牌提取器)
- 受保护资源的请求匹配器(默认为all)
- 受保护资源的访问规则(默认为纯“已验证”)
- Spring Security中HttpSecurity配置程序允许的受保护资源的其他自定义
@EnableResourceServer
注释将类型为OAuth2AuthenticationProcessingFilter
的筛选器自动添加到Spring安全筛选器链中
您可以使用Spring安全配置(WebSecurityConfigureAdapter
)对Spring安全中的HttpSecurity配置程序允许的受保护资源进行其他自定义,但最好使用资源服务器配置,因为:
- 封装(一个类中资源服务器的所有配置)
- 配置顺序(您不必更改顺序)
- 复杂性(一类而不是两类)
这是推荐的方法。谢谢,我想我理解为什么需要ResourceServer,但它包含配置方法,我在其中配置HttpSecurity参数,与扩展WebSecurity配置适配器的类相同。那么我应该只使用ResourceServer而不是WebSecurity配置适配器吗?或者在两者之间拆分该配置?在两者之间拆分。