[英]Do I need resource server with Spring Security OAuth2?
我正在尝试使用JWT令牌实现OAuth2身份验证。 如果我理解,我需要向授权服务器发送凭据,这将验证我的凭据,并返回签名的JWT令牌。 接下来我想实现WebSecurityConfig
延伸WebSecurityConfigurerAdapter
在那里,我必须设置哪些终端固定的,哪些不是。
但我的问题是:我需要资源服务器吗? 它与我潜在的WebSecurityConfig
做同样的工作,不是吗?
我的目标是为我的网站创建简单的JWT身份验证。
是的,您需要通过扩展ResourceServerConfigurerAdapter
来配置受JWT保护的ResourceServerConfigurerAdapter
。 基本实现可能如下所示
@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
因为上面的配置配置了您将在WebSecurityConfigurerAdapter
配置的相同HttpSecurity
对象。 public void configure(HttpSecurity http)
在两个类中都是相同的。
我们想要通过WebSecurityConfigurerAdapter
选择ResourceServerConfigurerAdapter
的原因是因为它是您正在使用的spring-security-oauth2模块的一部分,并将在框架的幕后使用。
您当然需要确保为授权服务器和资源服务器使用相同的签名密钥。 如果您在同一个应用程序中定义安全配置bean,资源服务器将自动使用相同的bean,否则您将需要复制授权服务器上的任何JWT相关配置。
您需要资源服务器,因为它是OAuth2规范的一部分:
资源服务器
托管受保护资源的服务器,能够使用访问令牌接受和响应受保护资源请求。
因此它也是Spring Security OAuth2的一部分。
资源服务器配置不仅仅是安全配置,请参阅OAuth 2开发人员指南 :
资源服务器配置
资源服务器(可以与授权服务器或单独的应用程序相同)提供受OAuth2令牌保护的资源。 Spring OAuth提供了一个实现此保护的Spring Security身份验证过滤器。 您可以在
@Configuration
类上使用@EnableResourceServer
将其打开,并使用ResourceServerConfigurer
配置(根据需要)。 可以配置以下功能:
- tokenServices:定义令牌服务的bean(ResourceServerTokenServices的实例)。
- resourceId:资源的id(可选,但建议由auth服务器验证,如果存在)。
- resourecs服务器的其他扩展点(例如,tokenExtractor用于从传入请求中提取令牌)
- 请求受保护资源的匹配器(默认为所有)
- 受保护资源的访问规则(默认为plain“authenticated”)
- Spring Security中HttpSecurity配置器允许的受保护资源的其他自定义
@EnableResourceServer
注释会自动将类型为OAuth2AuthenticationProcessingFilter
的过滤器添加到Spring Security过滤器链中。
您可以使用Spring Security配置( WebSecurityConfigurerAdapter
)进行Spring Security中HttpSecurity配置器允许的受保护资源的其他自定义 ,但最好使用资源服务器配置,因为:
这是推荐的方式。
我将尝试回答一个例子:假设您想编写一个非常酷的Web应用程序,可以以某种方式管理GMAIL帐户以及Google日历数据。 显然,您的用户必须使用他们的Google凭据登录,以便您的应用可以获取他们的数据并对其进行管理。 您的应用程序管理用户的数据,而无需获取用户的凭据。
到现在为止还挺好。
在此示例中, 授权服务器是Google帐户。 资源服务器是Google-Main和Google-Calendar(两者都是), 客户端就是您的应用程序。
希望有道理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.