将 Keycloak 授权服务与 Spring Boot(资源服务器)一起使用
Posted
技术标签:
【中文标题】将 Keycloak 授权服务与 Spring Boot(资源服务器)一起使用【英文标题】:Use Keycloak Authorization Services with Spring Boot (resource server) 【发布时间】:2017-11-13 13:54:38 【问题描述】:如何将 Keycloak 授权服务与 Spring Boot 资源服务器一起使用?
我有一个 keycloak 中的客户端设置为仅承载,并且可以使用其文档中的信息保护资源路径。
但当我的仅承载客户端的“授权已启用”设置为 true 并且我已设置资源、策略和权限时,则不会。
来自 Keycloak 文档https://keycloak.gitbooks.io/documentation/authorization_services/topics/enforcer/keycloak-enforcement-filter.html “如果您使用 Keycloak OIDC 适配器,您可以为您的应用程序强制执行授权决策。 当您为 Keycloak 应用程序启用策略执行时,相应的适配器会拦截对您的应用程序的所有请求并执行从服务器获得的授权决策。”
在 application.properties 我设置: keycloak.policy-enforcer-config.enforcement-mode=enforcing
并得到错误:
java.lang.NoClassDefFoundError: org.keycloak.authorization.client.ClientAuthenticator
我添加了依赖
<dependency> <!-- https://issues.jboss.org/browse/KEYCLOAK-3246 -->
<groupId>org.keycloak</groupId>
<artifactId>keycloak-authz-client</artifactId>
<version>3.1.0.Final</version>
</dependency>
但这在尝试访问资源时会出现如下错误
Client 'resourceserver-springboot' doesn't have secret available
org.keycloak.authorization.client.util.HttpResponseException: Unexpected response from server: 400 / Bad Request
【问题讨论】:
为什么要添加 keycloak-test-helper 依赖?这与 authz 无关。无论如何,你可以看看github.com/keycloak/keycloak-quickstarts/tree/master/… 对不起,我的问题不是 keycloak-test-helper,而是 keycloak-authz-client 我会更新问题。 嗨 Sebastian,看起来该演示适用于 Keycloak 版本 3.2.0.CR1-SNAPSHOT。我使用的是 3.1.0.Final 版本。我可以在 3.1.0.Final 上运行它还是需要等待新版本的更改? 是的,它应该与 3.1 一起使用。Final 只需在您的 pom.xml 中添加keycloak-authz-client
依赖项。
我来晚了。如果不能,这个问题解决了吗?你能分享 pom.xml 和 application.properties 文件吗?即使我得到这个我的错误是同时进行启动和弹簧安全配置。
【参考方案1】:
看起来您忘记在配置中传递秘密:
keycloak.credentials.secret=my_secret
【讨论】:
我有,但是即使添加了它,我仍然会收到错误,类似于“org.keycloak.authorization.client.util.HttpResponseException: Unexpected response from server: 400 / Bad Request]”在包含 Keycloak 授权服务之前,我确实知道 API 的工作原理是经过测试的。将 keycloak-authz-client 用于纯资源服务器似乎是错误的。忙于完成您发送给我的快速入门。乍一看,这似乎是客户端 Web 应用程序的示例,而不是资源服务器。 Resource Server 使用 kc-authz-client 并没有错。原因是 RS 应该能够访问一些 API 以管理资源。此外,在使用 UMA 时,还有一个用于获取权限票证的 API。快速入门基本上既是客户端又是 RS。 嗨塞巴斯蒂安,我已经为 3.1.0.Final 工作了快速入门。但无法保护我添加到 ApplicationController 的 JSON 响应:'@RequestMapping(value = "/protected/hello", method = RequestMethod.GET) public Map或
将配置添加到您的 application.properties 文件中。 还要创建一个 bean 来解析您的 application.properties 钥匙斗篷适配器
@豆 打开有趣的 keycloakConfigResolver(): KeycloakSpringBootConfigResolver 返回 KeycloakSpringBootConfigResolver()
【讨论】:
以上是关于将 Keycloak 授权服务与 Spring Boot(资源服务器)一起使用的主要内容,如果未能解决你的问题,请参考以下文章
如何在 .html 文件中使用 Keycloak 将 thymleaf 与 Spring Security 一起使用?
Spring Boot - 无法通过 Zuul 代理获得 Keycloak 授权 api 的响应