【问题标题】:I would like to integrate Keycloak with Spring Boot 2 and Swagger我想将 Keycloak 与 Spring Boot 2 和 Swagger 集成
【发布时间】:2019-03-28 14:02:26
【问题描述】:

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

感谢您的帮助

【问题讨论】:

  • 这没有任何意义。为什么 swagger 需要访问令牌?

标签: spring-boot swagger keycloak


【解决方案1】:

首先要做出的决定是是否说访问 swagger 页面的用户需要具有访问令牌(即 swagger 的 url 模式是安全的,并且用户必须登录才能访问 swagger)或者您排除来自 keycloak 的 swagger URL,以便无需令牌即可访问其 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 security 执行此操作 - 通常您可以在 SecurityConfiguration java 类中执行此操作。

然后您将根据您的chosen oauth2 flow 以及您是否使用“试用”功能做出决定。您可以显示描述,但不一定需要令牌,但“试用”确实需要令牌。上面的那个 yaml 示例也有一种方法可以告诉 swagger 令牌颁发者 url:

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 令牌的具体问题并非特定于 keycloak,而是一般swagger-oauth2 configuration for which there is a guide at baeldungKeycloak integration in Swagger 中有一个使用不同模式的示例

【讨论】:

  • 非常感谢您的回答。我会按照你的指示适应
猜你喜欢
  • 2019-04-28
  • 2020-01-11
  • 2022-11-17
  • 1970-01-01
  • 2020-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-20
相关资源
最近更新 更多