Ingress支持JWT身份验证吗?

11

目前我正在使用Ingress-Nginx作为外部流量的路由服务。然而,很少有文章介绍Ingress如何进行JWT认证以保护内部API。有人能分享一些信息吗?

1个回答

10
根据研究:
不同的身份验证 API 调用已经合并成 OAuth 2.0 访问令牌的形式。
这些是从客户端传递到 API 服务器的身份验证凭据,并通常作为 HTTP 标头传递。
JSON Web Token (JWT) 是 RFC 7519 定义的其中之一。
根据文档:
JSON Web Token (JWT) 是一种紧凑、安全的表示要在两个方之间传输声明的方式。JWT 中的声明被编码为 JSON 对象,该对象用作 JSON Web Signature (JWS) 结构的有效负载或 JSON Web Encryption (JWE) 结构的纯文本,从而使声明能够使用消息认证码 (MAC) 和/或加密进行数字签名或完整性保护。

这种机制可以使用不同的入口控制器来应用,例如kubernetes nginx-ingressnginxinc ingress controller

根据nginx inc文档:

NGINX auth_request模块用于代表后端服务验证令牌。

客户端只有在提供有效令牌的情况下才能访问后端服务。 现有的后端服务可以受到访问令牌的保护,无需进行代码更改。 只有NGINX实例(而不是每个应用程序)需要向IdP注册。 每个错误条件的行为都是一致的,包括缺少或无效的令牌。

对于NGINX作为一个或多个应用程序的反向代理,我们可以使用auth_request模块在将请求代理到后端之前触发对IdP的API调用。
  • 在kubernetes ingress中,您可以找到关于外部认证的信息

要使用提供身份验证的现有服务,Ingress规则可以带注释nginx.ingress.kubernetes.io/auth-url,以指示应发送HTTP请求的URL。

在这里,您可以找到nginx-subrequest-auth-jwt工作示例

此项目实现了一个简单的JWT验证端点,旨在与NGINX的子请求身份验证一起使用,并特别适用于Kubernetes NGINX Ingress Controller外部auth注释

它根据配置的公钥验证传递给Authorization标头的JWT令牌,并进一步验证JWT是否包含适当的声明。

这个例子使用PyJwt python库,它允许你编码和解码JSON Web Tokens (JWT)。
其他资源:
- nginxinc控制器 - Github上的Kubernetes JWT身份验证 希望这有所帮助。

我正在尝试在OpenShift上应用它,但是它不起作用,即使我使用了之前在k8s中使用并且有效的相同注释。有什么想法吗? 我没有找到任何关于在OpenShift上讨论此问题的在线资料,我有点困惑。 - Ahmed Anwar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接