我想将Keycloak与Spring Boot 2和Swagger集成

时间:2018-10-24 08:24:38

标签: spring-boot swagger keycloak

现在,我使用Spring Boot 2.0.0.RELEASE和Swagger 3.1.6版本以及Jboss的Keycloak。我想知道如何在application.yml中进行配置,然后让swagger可以从Keycloak获取access_token。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

首先要做出的决定是说访问swagger页面的用户是否需要具有访问令牌(即swagger的url模式已得到保护,用户必须登录才能进行swagger),或者您排除了从keycloak摇摇网址,以便无需令牌即可访问其UI。

如果您使用的是keycloak spring boot adapter,则在application.yml或application.properties文件中将要保护的URL模式(以及访问它们需要哪些角色)配置为安全约束。作为属性的一个例子是:

keycloak.security-constraints[0].authRoles[0]=user
keycloak.security-constraints[0].securityCollections[0].patterns[0]=/customers/*

这可以翻译为yaml:

keycloak:
  security-constraints[0]:
    -authRoles[0]: user
    -securityCollections[0]:
      -patterns[0]: /customers/*

https://github.com/codemonkeybr/skip/blob/master/skip-cart/src/main/resources/application.yml#L29处的真实yml示例)

不受安全约束约束的任何事物均不受限制。如果您不使用官方的keycloak adpater,则可以通过spring安全性执行类似的操作-通常,您可以在SecurityConfiguration java类中进行此操作。

然后,您将根据自己的chosen oauth2 flow以及是否使用“试用”功能来做出决策。您可以显示描述,而无需令牌,但“试用”确实需要令牌。上面的yaml示例还提供了一种方法来告诉您令牌发行者的网址:

swagger:
  auth:
    token-url: ${keycloak.auth-server-url}/realms/${keycloak.realm}/protocol/openid-connect/token/
    client-id: skip-local

该配置由java swagger configuration class读取,并且是您可以运行的whole example的一部分。这个如何配置swagger以与oauth2令牌一起使用的特定问题并不特定于密钥斗篷,而是通用的swagger-oauth2 configuration for which there is a guide at baeldung,并且在Keycloak integration in Swagger

中有一个使用不同模式的示例