如何使用 FusionAuth java 客戶端庫驗證 HS256 ID 令牌?
描述:我在 FusionAuth 中創建了一個應用程式,它生成了一個客戶端 ID 和客戶端密碼,我沒有觸及任何其他部分/選項卡,如 JWT 等,默認 JWT 簽名演算法是 OIDC 標準 HMAC SHA256。
我嘗試使用以下代碼方法基于公鑰驗證令牌,但它不適用于 HS256 簽名令牌,我在互聯網上搜索發現公鑰不適用于 HS256
您能否提供一個 Java 代碼來使用 FusionAuth Java 客戶端庫(https://github.com/FusionAuth/fusionauth-jwt)驗證 HS256 簽名令牌。還請讓我知道我是否需要在 FusionAuth 管理控制臺上進行任何其他配置。
我試過的代碼:它給出了空白的公鑰。
List<JSONWebKey> keys = JSONWebKeySetHelper.retrieveKeysFromJWKS("http://localhost:9011/.well-known/jwks.json");
Map<String, Verifier> publicKeyVerifiers = new HashMap<String, Verifier>();
JWT jwtDecoded = JWT.getDecoder().decode(idToken, publicKeyVerifiers);
uj5u.com熱心網友回復:
應用程式收到的令牌通常應使用非對稱密鑰進行簽名。然后,您可以使用通過 JWKS 端點提供的簽名公鑰來驗證令牌的數字簽名。令牌最主流的演算法是RS256。也許您需要按照此處的建議重新配置?我認為您的代碼也將起作用。
HS256 是一種對稱演算法,感覺不對,因為客戶端只有擁有完整的簽名密鑰才能驗證 JWT。這使得惡意客戶端能夠鑄造他們自己的令牌,而只有授權服務器才能做到這一點。因此,如果 JWT 曾經使用對稱密鑰進行簽名,JWKS 端點將不會提供令牌簽名密鑰。
意思是說 Curity 有一個很好的相關檔案:
- 智威湯遜最佳實踐
uj5u.com熱心網友回復:
看起來自述檔案中有一個示例:
// Build an HMC verifier using the same secret that was used to sign the JWT
Verifier verifier = HMACVerifier.newVerifier("too many secrets");
// Verify and decode the encoded string JWT to a rich object
JWT jwt = JWT.getDecoder().decode(encodedJWT, verifier);
// Assert the subject of the JWT is as expected
assertEquals(jwt.subject, "f1e33ab3-027f-47c5-bb07-8dd8ab37a2d3");
https://github.com/FusionAuth/fusionauth-jwt#verify-and-decode-a-jwt-using-hmac
使用 HMAC 簽名,您需要將密鑰("too many secrets"在上面的示例中)分發到需要驗證 JWT 的所有位置。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/424369.html
標籤:验证 oauth-2.0 jwt 融合认证 hmacsha256
