Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我需要带Spring Security OAuth2的资源服务器吗?_Java_Spring_Spring Security_Jwt_Spring Security Oauth2 - Fatal编程技术网

Java 我需要带Spring Security OAuth2的资源服务器吗?

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

我正在尝试用JWT令牌实现OAuth2身份验证。若我理解,我需要将凭据发送到授权服务器,这将验证我的凭据,并返回已签名的JWT令牌。接下来,我尝试实现
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配置适配器吗?或者在两者之间拆分该配置?在两者之间拆分。