【发布时间】: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 文件吗?即使我得到这个我的错误是同时进行启动和弹簧安全配置。
标签: spring-boot keycloak