[英]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.