目前我正在使用Ingress-Nginx作为外部流量的路由服务。然而,很少有文章介绍Ingress如何进行JWT认证以保护内部API。有人能分享一些信息吗?
目前我正在使用Ingress-Nginx作为外部流量的路由服务。然而,很少有文章介绍Ingress如何进行JWT认证以保护内部API。有人能分享一些信息吗?
这种机制可以使用不同的入口控制器来应用,例如kubernetes nginx-ingress或nginxinc ingress controller。
根据nginx inc文档:
NGINX auth_request模块用于代表后端服务验证令牌。
客户端只有在提供有效令牌的情况下才能访问后端服务。 现有的后端服务可以受到访问令牌的保护,无需进行代码更改。 只有NGINX实例(而不是每个应用程序)需要向IdP注册。 每个错误条件的行为都是一致的,包括缺少或无效的令牌。
对于NGINX作为一个或多个应用程序的反向代理,我们可以使用auth_request模块在将请求代理到后端之前触发对IdP的API调用。
要使用提供身份验证的现有服务,Ingress规则可以带注释nginx.ingress.kubernetes.io/auth-url,以指示应发送HTTP请求的URL。
在这里,您可以找到nginx-subrequest-auth-jwt工作示例
此项目实现了一个简单的JWT验证端点,旨在与NGINX的子请求身份验证一起使用,并特别适用于Kubernetes NGINX Ingress Controller外部auth注释
这个例子使用PyJwt python库,它允许你编码和解码JSON Web Tokens (JWT)。它根据配置的公钥验证传递给Authorization标头的JWT令牌,并进一步验证JWT是否包含适当的声明。