spring-boot - 使用 Kong API Gateway key-auth 插件和 keycloak 保护的其余 api

标签 spring-boot keycloak openid-connect kong kong-plugin

我的设置如下:

  1. Rest API(Spring 启动)
  2. 前端应用程序 (Angular 8)
  3. 身份验证服务器(Keycloak)

当前情况:

  1. 用户在 Angular 登录页面中输入用户名和密码。
  2. Angular 发出 POST 请求并从 keycloak 服务器获取访问 token 、刷新 token 等。
  3. 在对rest api服务器(仅持有者)的所有后续请求中,都会传入访问 token header 为“授权:持有者
  4. Rest API 会查看用户的角色,并据此返回所需的数据或引发 403 Forbidden 异常。

我想要什么: 使用 api-key 对外部用户进行身份验证,然后为其添加速率限制。为此,我使用 Kong API Gateway。对于通过 Angular 应用程序登录的内部或受信任用户,现有的访问 token 流程应该可以工作。

问题: 当在 Kong 中使用 apikey 时,它确实通过了 Kong 的身份验证,但其余 api 服务器仍然需要访问 token ,因此会收到 401 未经授权的错误。

最佳答案

我找到了这个问题的解决方案。基本上你需要配置一个匿名消费者和 enable multiple authentication methods使用 Kong 的 key-auth 插件实现基于 api-key 的安全性,使用 openid-connect 插件实现基于 keycloak 的安全性。

对于那些没有 Kong Enterprise 的人,由于 openid-connect 插件不是开源的,您可以仅配置启用匿名访问的 key-auth 插件,然后在其余应用程序中处理基于 keycloak 的身份验证。

关于spring-boot - 使用 Kong API Gateway key-auth 插件和 keycloak 保护的其余 api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63351505/

相关文章:

java - 每 30 秒查询 PostgreSQL 的有效方法?

kubernetes - 如何使用 keycloak-gatekeeper 保护 Kibana 仪表板?

authentication - 在运行时向 OWIN 管道注册新的中间件,无需重新启动应用程序

java - Webflux 和 keycloak 在 jwt 中使用方法安全级别@Preauthorize 自定义声明而不是默认范围

java - Spring Boot - KeyCloak 指向 403 forbidden

oauth-2.0 - auth0 和 IdentityServer 有什么不同?

api - 使用 openid-connect 进行身份验证 spa 和 Rest api

spring-boot - 如何在jooq查询中左连接时检查记录是否为空

java - 通过环境变量在 Spring Boot 中设置日志记录级别

java - 在将应用程序迁移到 Spring Boot 后使用 Spring Data Rest 时,我观察到带有 @Id 的实体属性不再编码为 JSON