Ingress-Nginx:如何将内省响应中的属性添加到代理请求

Ingress-Nginx: How to add attributes from introspection response to proxied request

我是运行一个基于微服务的应用程序,具有许多基本服务和一个使用 IdentityServer4 的 Oauth 令牌服务。我想直接使用来自入口控制器的身份服务进行令牌自省,我认为这似乎得到支持(https://kubernetes.github.io/ingress-nginx/examples/auth/oauth-external-auth/) - 然后根据用户在应用层的角色检查是否允许访问在各种服务中。

我的内省响应中有有价值的信息,我想在内省完成后从我的入口控制器传递到我的不同服务(角色、用户名、电子邮件等)。关于在 ingress-nginx 中使用 oauth 的文档非常缺乏。我想知道是否有人知道这是否受支持,如果支持我将如何实施它。

我最近对 ​​NGINX 和 Kong 看了同样的东西,得出了这个结论:

  • 首先使用通用入口/负载均衡器
  • 后跟反向代理/API 某些路由的网关
  • 后跟实际后端API

您可以根据需要自定义第二层,例如自定义 nginx.conf 文件并添加 LUA 插件。

但是第一层倾向于使用自己的 nginx 模板,这些模板与默认模板有很大不同。每当您公开一个新的 Kubermetes 服务时,都会启动一个新的入口模板实例。实际上,入口是与反向代理不同的服务器角色,并不意味着以相同的方式进行定制。

在 Curity,我们做了很多与 OAuth 相关的工作,我建议您通过以下方式实现您的目标:

  • 不要管入口
  • 在入口之后在反向代理层中进行自省,以便您可以通过 LUA 脚本添加您的自省(和任何其他)逻辑。 OpenResty 和 Kong Open Source 都是不错的选择。
  • 我们称之为 phantom token pattern
  • 这是您可以插入的示例 LUA Implementation - 请注意,结果缓存是确保良好性能的解决方案的重要组成部分