在Spring Boot中使用Keycloak授权服务(资源服务器)

时间:2017-06-12 07:21:06

标签: spring-boot keycloak

如何在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

2 个答案:

答案 0 :(得分:0)

看起来你忘了在你的配置中传递秘密: keycloak.credentials.secret=my_secret

答案 1 :(得分:0)

  • 将keycloak.json添加到您的资源中,(通常keycloak适配器看起来 用于配置的keycloak.json)

OR

  • 将配置添加到application.properties文件中。 还创建一个bean来解析您的application.properties为 钥匙扣适配器

    @Bean 打开乐趣keycloakConfigResolver():KeycloakSpringBootConfigResolver { 返回KeycloakSpringBootConfigResolver() }