2016-04-28 48 views
0

Azure AD B2C具有OpenID Connect元數據端點,該端點允許應用程序在運行時獲取信息。此端點具有有關令牌簽名密鑰,令牌內容和端點的信息。我需要查詢此端點以獲取jwk_uris。 jwk_uri具有用於簽署jwt的密鑰的uri。我需要緩存這些密鑰不超過24小時。任何人都可以建議我如何在春季做到這一點?有沒有支持這個的API?緩存從openid獲取的json Web密鑰連接元數據端點

+0

到目前爲止你有嘗試過什麼嗎? – UditS

+0

我仍然在做我的研究,但我還沒有找到任何可以用於緩存的內容。我提到[link](https://bitbucket.org/b_c/jose4j/wiki/Home)。我還發現[鏈接](http://www.programcreek.com/java-api-examples/index.php?source_dir=identity-providers-examples-master/OpenID-Connect-MITREid-Java-Spring-Server/openid -connect-common/src/main/java/org/miter/jwt/signer/service/impl/JWKSetCacheService.java)但不確定是否應該使用它 – Shiv

+0

org.jose4j.jwk.HttpsJwks會進行緩存。所以我想我可以使用jose4j來解決我的問題嗎?但是我沒有得到任何有關HttpsJwks的詳細文檔。誰可以幫我這個事? – Shiv

回答

1

HttpsJwks將根據緩存指令標頭或http響應或setDefaultCacheDuration(long defaultCacheDuration)緩存密鑰一段時間,如果響應的緩存指令標頭不存在或者指示內容不應該被緩存。

的HttpsJwks對象可以與JwtConsumer/JwtConsumerBuilder and HttpsJwksVerificationKeyResolver在JWT不在緩存集合一起,也將作出新的調用jwk_uri和reeastablitsh緩存中,如果遇到kid(密鑰ID)使用的鑰匙。

+0

感謝您的回覆。我正在使用雙通道JWT消耗並使用新的HttpsJwksVerificationKeyResolver(httpsJkws)傳遞驗證密鑰;我能夠處理這些索賠,但我對驗證簽名感到困惑。我是否需要做更多的驗證簽名或HttpsJwksVerificationKeyResolver內部驗證簽名也。 – Shiv

+0

我在驗證聲明和驗證簽名之間感到困惑。這些都是由HttpsJwksVerificationKeyResolver處理的嗎? – Shiv

+0

JwtConsumer類既對聲明進行驗證,也對簽名進行驗證(當然,這取決於如何使用JwtConsumerBuilder創建它)。 HttpsJwksVerificationKeyResolver從jwk_uri的JWKs中查找適當的鍵,查看JWT的標題,並將其提供給JwtConsumer,JwtConsumer使用該鍵驗證簽名。如果簽名有效,則檢查索賠。使用兩遍JWT消耗,所有驗證都會在第二階段進行。另外請注意,您需要重用HttpsJwks實例才能獲得緩存優勢。 –

0

使用Spring框架將調度和緩存結合了可能的解決方案: