如何在Spring Boot资源服务器上使用Keycloak授权服务?
我将keycloak中的客户端设置为仅承载,并且可以使用其文档中的信息保护资源路径。
但是,对于我的仅限承载的客户端,“授权已启用”设置为true并且我已设置资源,策略和权限。
来自Keycloak文档https://keycloak.gitbooks.io/documentation/authorization_services/topics/enforcer/keycloak-enforcement-filter.html “如果使用Keycloak OIDC适配器,则可以为应用程序强制执行授权决策。 为Keycloak应用程序启用策略实施时,相应的适配器会拦截对您的应用程序的所有请求,并强制执行从服务器获取的授权决策。“
在application.properties中我设置: keycloak.policy-实施者-config.enforcement模式=执行
并收到错误:
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
答案 0 :(得分:0)
看起来你忘了在你的配置中传递秘密:
keycloak.credentials.secret=my_secret
答案 1 :(得分:0)
OR
将配置添加到application.properties文件中。 还创建一个bean来解析您的application.properties为 钥匙扣适配器
@Bean 打开乐趣keycloakConfigResolver():KeycloakSpringBootConfigResolver { 返回KeycloakSpringBootConfigResolver() }