我是否需要具有Spring Security OAuth2的资源服务器?

时间:2018-02-05 18:35:32

标签: java spring spring-security jwt spring-security-oauth2

我正在尝试使用JWT令牌实现OAuth2身份验证。如果我理解,我需要向授权服务器发送凭据,这将验证我的凭据,并返回签名的JWT令牌。接下来,我尝试了扩展WebSecurityConfig的实现WebSecurityConfigurerAdapter,在那里我必须设置哪些端点是安全的,哪些端点不是。

但我的问题是:我需要资源服务器吗?它与我的潜在WebSecurityConfig做同样的工作,不是吗?

我的目标是为我的网站创建简单的JWT身份验证。

3 个答案:

答案 0 :(得分:6)

是的,您需要通过扩展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);
    }

}

这意味着您不需要扩展WebSecurityConfigurerAdapter,因为上述配置会配置您在HttpSecurity中配置的相同WebSecurityConfigurerAdapter对象。 public void configure(HttpSecurity http)在两个类中都起着同样的作用。

我们想要选择ResourceServerConfigurerAdapter超过WebSecurityConfigurerAdapter的原因是因为它是您正在使用的spring-security-oauth2模块的一部分,并将在框架后面使用。

您当然需要确保为授权服务器和资源服务器使用相同的签名密钥。如果您在同一个应用程序中定义安全配置bean,资源服务器将自动使用相同的bean,否则您将需要复制授权服务器上的任何JWT相关配置。

答案 1 :(得分:5)

您需要资源服务器,因为它是OAuth2 spec

的一部分
  

资源服务器

     

托管受保护资源的服务器,能够接受   并使用访问令牌响应受保护的资源请求。

因此它也是Spring Security OAuth2的一部分。

资源服务器配置不仅仅是安全配置,请参阅OAuth 2 Developers Guide

  

资源服务器配置

     

资源服务器(可以与授权服务器或单独的应用程序相同)提供受OAuth2令牌保护的资源。 Spring OAuth提供了一个实现此保护的Spring Security身份验证过滤器。您可以在@EnableResourceServer类上使用@Configuration进行切换,然后使用ResourceServerConfigurer对其进行配置(根据需要)。可以配置以下功能:

     
      
  • tokenServices:定义令牌服务的bean(ResourceServerTokenServices的实例)。
  •   
  • resourceId:资源的id(可选,但建议使用,如果存在,将由auth服务器验证)。
  •   
  • resourecs服务器的其他扩展点(例如,用于从传入请求中提取令牌的tokenExtractor)
  •   
  • 请求匹配受保护资源(默认为所有)
  •   
  • 受保护资源的访问规则(默认为普通“已验证”)
  •   
  • Spring Security中HttpSecurity配置器允许的受保护资源的其他自定义
  •   
     

@EnableResourceServer注释会自动将类型为OAuth2AuthenticationProcessingFilter的过滤器添加到Spring Security过滤器链中。

您可以将Spring安全配置(WebSecurityConfigurerAdapter)用于其他针对Spring Security中HttpSecurity配置器所允许的受保护资源的自定义,但最好使用资源服务器配置,因为:

  • 封装(一个类中资源服务器的所有配置)
  • 配置订购(您无需更改订单)
  • 复杂性(一个班级而不是两个班级)

这是推荐的方式。

答案 2 :(得分:4)

我将尝试回答一个例子:假设您想要编写一个非常酷的Web应用程序,可以以某种方式管理GMAIL帐户以及Google日历数据。显然,您的用户必须使用他们的Google凭据登录,以便您的应用可以获取他们的数据并对其进行管理。您的应用程序管理用户的数据,而无需获得用户的访问权限。凭证。

到目前为止一切顺利。

在此示例中,授权服务器是Google帐户。 资源服务器是Google-Main和Google-Calendar(两者都是),客户端是您的应用程序。

希望这是有道理的。