簡體   English   中英

我是否需要 spring 引導 oauth2 授權服務器來生成自定義 JWT 和 JWKS 端點?

[英]Does I need a spring boot oauth2 authorization server to generate a custom JWT and a JWKS endpoint?

如果有人能幫助我找到最好或最簡單的方法,我將不勝感激。

我需要使用 JWT 令牌在我的應用和合作伙伴之間進行通信

步驟如下:

  1. 用戶已經在 MyApp 中使用另一個用戶憑據解決方案進行了身份驗證
  2. MyApp 應該生成一個 JWT 令牌,其中包含一些用戶信息,例如訂閱 ID
  3. MyApp 使用 JWT 令牌重定向到合作伙伴 url
  4. 合作伙伴使用公鑰(必須在 JWKS 端點中公開)來驗證 jwt 令牌是否由我的應用程序頒發。

我的主要疑問如下:

一種。 我需要使用 spring oauth2 授權服務器還是可以只使用一些 spring 安全組件來生成令牌並公開 jwks 端點? b. 如果我使用spring oauth2授權服務器,如何自定義/oauth2/token接收用戶信息生成token? c。如果我使用 spring oauth2 授權服務器,我如何根植我的公鑰? d. 如果我只使用 spring 安全組件,你能分享一些生成 JWT 的教程嗎? e. 如果我只使用 spring 安全組件,在端點生成 jwks informatino 會不會很簡單?

關於 a) 項

不需要像客戶端憑證流這樣的授權服務器,我的應用程序可以通過它自己生成 JWT 令牌,我使用 spring 授權服務器只是為了獲得所有結構來生成令牌的好處。 利用 spring 引導結構真的有必要還是最好的方法,還是使用一些 spring 安全組件來生成令牌最簡單?

關於項目 b)

如果最好的決定是使用 Spring Oauth2 授權服務器,我的想法是將 /oauth2/token 與客戶端憑據一起使用,但問題是如果我沒有用戶,我如何生成帶有一些用戶特定信息的 JWT 令牌POST /oauth2/token 請求中的信息? 是否可以自定義授權服務器請求以在正文或 header 中接收我需要的信息? 我在谷歌搜索,似乎是可能的。 我只是想確認這樣做是可以的。

關於c)項

是否可以在 spring oauth2 授權服務器中不停機地輪換公鑰?

該過程是否只是生成一個新的 jks,在服務器指向的路徑中更改它並在授權服務器中像 POST /refresh 一樣調用?

關於項目 B ,我想出了一個解決方案。

您可以在請求中設置任何其他值

在此處輸入圖像描述

然后您可以自定義令牌 JWT 恢復請求中發送的 custom_value

@Bean
public OAuth2TokenCustomizer<JwtEncodingContext> jwtEncodingContextOAuth2TokenCustomizer(UserRepository userRepository){
    return (context -> {
        Authentication authentication = context.getPrincipal();
        if (authentication.getPrincipal() instanceof String) {
            OAuth2AuthorizationGrantAuthenticationToken tok = (OAuth2AuthorizationGrantAuthenticationToken) context.getAuthorizationGrant();
            context.getClaims().claim("custom_clain", tok.getAdditionalParameters().get("custom_value"));
        }
    });
}

然后 output 令牌將具有 claim 自定義值

在此處輸入圖像描述

JWT 已簽名,您將公開公鑰,所以是的,使用授權服務器頒發令牌並公開密鑰,但您不必使用 Spring 的授權服務器:任何嚴肅的授權服務器都有設置私有聲明的機制.

您可以使用任何 OAuth2 授權服務器,但 OIDC 實現將更容易用於其他參與者。

Spring-security 授權服務器的內置功能非常有限。 在做出選擇之前,您應該看看其他解決方案。 有很多內部部署(如 Keycloak)或 SaaS(如 Auth0 或你的雲提供商建議的任何東西,如果你托管在雲中)。

OAuth2 比內部安全有很多優勢(這可能是您的合作伙伴要求它的原因)。 我建議您實際上將所有安全性切換到 OAuth2。 選擇授權服務器並將其配置為使用現有用戶數據庫后,請配置:

暫無
暫無

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

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