我尝试使用 Spring Boot 和 Keycloak 作为 AuthService 来实现一个简单的 OAuth2“使用签名 JWT 进行客户端身份验证”演示应用程序。
这个想法是:
- one secured REST service "The Producer"
- 为所有具有“read_person”角色的用户/主体提供端点 GET /person
- 为具有“write_person”角色的所有用户/主体提供端点 POST /person
- another (unsecured) REST service "The Consumer"
- 提供对所有人开放的端点/api
- 通过调用内部“生产者”
Feign
客户端使用 RequestInterceptor 传递 AccessToken(签名的 JWT / JWS)
我读到了有关文档的内容:
http://www.keycloak.org/docs/latest/secure_apps/topics/oidc/java/client-authentication.html http://www.keycloak.org/docs/latest/securing_apps/topics/oidc/java/client-authentication.html
saying:
客户端应用程序启动后,它允许使用以下 URL 以 JWKS 格式下载其公共密钥:http://myhost.com/myapp/k_jwks http://myhost.com/myapp/k_jwks, >假设http://myhost.com/myapp http://myhost.com/myapp是您的客户端>应用程序的基本 URL。 Keycloak 可以使用此 URL(见下文)。
在身份验证过程中,客户端生成 JWT 令牌并使用其私钥对其进行签名,然后将其发送到 client_assertion > 参数中特定反向通道 > 请求(例如,代码到令牌请求)中的 Keycloak。
我在谷歌上搜索了很多关于这个主题的教程/演示或文档,但到目前为止都失败了。
所以这是我的问题:
如何实现这个“k_jwk”端点?我可以简单地构建一个@RestController
我自己在《制作人》里?如何配置 Keycloak 来了解此 URL?
如何实现我的“消费者”以从 Keycloak 获取新签名的 JWT?
Update删除了令人恼火的 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
etc ...
您需要一个令牌才能调用producer
但正如您所说,入口点将是一个不安全的端点,因此您可能需要使用服务帐号 https://www.keycloak.org/docs/latest/server_admin/index.html#_service_accounts为了这。
我希望这个能帮上忙。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)