簡體   English   中英

我是否需要具有Spring Security OAuth2的資源服務器?

[英]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配置器允許的受保護資源的其他自定義 ,但最好使用資源服務器配置,因為:

  • encapsulation(一個類中資源服務器的所有配置)
  • 配置訂購(您不必更改訂單)
  • 復雜性(一個類而不是兩個類)

這是推薦的方式。

我將嘗試回答一個例子:假設您想編寫一個非常酷的Web應用程序,可以以某種方式管理GMAIL帳戶以及Google日歷數據。 顯然,您的用戶必須使用他們的Google憑據登錄,以便您的應用可以獲取他們的數據並對其進行管理。 您的應用程序管理用戶的數據,而無需獲取用戶的憑據。

到現在為止還挺好。

在此示例中, 授權服務器是Google帳戶。 資源服務器是Google-Main和Google-Calendar(兩者都是), 客戶端就是您的應用程序。

希望有道理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM