[英]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.