![](/img/trans.png)
[英]How can OAuth2 resource server use endpoint to access public key when I add custom jwt details to the authorization server?
[英]Does I need a spring boot oauth2 authorization server to generate a custom JWT and a JWKS endpoint?
如果有人能幫助我找到最好或最簡單的方法,我將不勝感激。
我需要使用 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.