[英]Implementing JWT, JWE and JWS (signed JWT) with Keycloak in Spring Boot
我嘗試使用Spring Boot和Keycloak作為AuthService來實現一個簡單的OAuth2“使用簽名的JWT進行客戶端身份驗證”演示應用程序。
這個想法是:
Feign
客戶端使用RequestInterceptor調用內部的“生產者”以傳遞AccessToken(簽名的JWT / JWS) 我閱讀了有關文檔:
http://www.keycloak.org/docs/latest/securing_apps/topics/oidc/java/client-authentication.html
他說:
客戶端應用程序啟動后,就可以使用http://myhost.com/myapp/k_jwks之類的URL以JWKS格式下載其公共密鑰,前提是假定http://myhost.com/myapp是基礎您的客戶端>應用程序的URL。 Keycloak可以使用此URL(請參見下文)。
在身份驗證期間,客戶端會生成一個JWT令牌,並使用其私鑰對其進行簽名,然后在client_assertion>參數中的特定反向通道請求(例如,代碼令牌請求)中將其發送到Keycloak。
我在Google上進行了大量搜索,以找到有關此主題的教程/演示或文檔,但到目前為止仍失敗。 所以這是我的問題:
如何實現此“ k_jwk”端點? 我是否自己在“生產者”中簡單地構建@RestController
? 如何配置Keycloak來了解此URL?
如何實現我的“消費者”以從Keycloak獲得新的簽名JWT?
更新刪除了煩人的PS語句。
您不需要實現k_jwk端點,這是由適配器處理的。 默認情況下,Keycloak將查看http:///your.app.com/k_jwk
(但如果需要,您可以在控制台中覆蓋它)。 然后,您需要配置Spring Boot客戶端,只需使用與keycloak.json相同的屬性,但格式為application.properties:
...
keycloak.credentials.jwt.client-keystore-file = classpath:keystore-client.jks keycloak.credentials.jwt.client-keystore-type = JKS
等...
您需要一個令牌來調用producer
但是正如您所說的,入口點將是一個不安全的端點,因此您可能要為此使用服務帳戶 。
我希望這將有所幫助。
更新
我無法解決此問題,但與此同時了解了一些關於JWT的知識:
通過自己創建具有所有必要聲明(sub,nbf,exp ...)的Json結構並使用Keycloak的JKS /私鑰對其進行簽名/驗證,從而創建所謂的“承載者令牌”。 在Keycloak旁邊有一些不錯的第三方庫可以做到這一點。
要從Keycloak獲取真實的AccessToken(JWE / JWS):在/ auth / realms / $ realm / protocol / openid-connect / token / introspect將此靜態最終承載令牌發送到Keycloak
使用QueryParams:
grant_type = client_credentials&client_assertion_type =瓮%3Aietf%3Aparams%3Aoauth%3Aclient斷言型%3Ajwt承載&client_assertion = $ BEARER_TOKEN
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.