Ingress如何支持JWT身份验证?

时间:2019-10-21 21:58:52

标签: kubernetes jwt kubernetes-ingress nginx-ingress

现在,我正在使用Ingress-Nginx作为外部流量的路由服务。但是,很少有文章介绍Ingress如何播放JWT身份验证来保护内部API。 有人可以分享一些信息吗?

1 个答案:

答案 0 :(得分:1)

根据研究:

  

不同的身份验证API调用已以OAuth 2.0访问令牌的形式合并。

     

这些是从客户端传递到API服务器的身份验证凭据,通常作为HTTP标头携带。

RFC 7519定义的

JSON Web令牌(JWT)是其中之一。

根据文档:

  

JSON Web令牌(JWT)是一种紧凑的,URL安全的表示方式      声称在两方之间转移。智威汤逊的索赔      被编码为JSON对象,用作JSON的有效负载      Web签名(JWS)结构或JSON Web的纯文本      加密(JWE)结构,使索赔数字化      消息验证码对签名或完整性进行保护      (MAC)和/或加密。

可以使用诸如kubernetes nginx-ingressnginxinc ingress controller之类的不同入口控制器来应用此机制。

根据nginx inc文档:

  

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

     

仅当客户端出示有效令牌时,请求才到达后端服务   可以通过访问令牌保护现有的后端服务,而无需更改代码   只有NGINX实例(并非每个应用程序)都需要向IdP注册   行为对于每种错误情况(包括丢失或无效的令牌)都是一致的

     

因此,对于NGINX充当一个或多个应用程序的反向代理,我们可以在将请求代理到后端之前,使用auth_request模块触发对IdP的API调用。

  

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

>

在这里您可以找到working example nginx-subrequest-auth-jwt

  

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

     

它针对已配置的公钥验证在Authorization标头中传递的JWT令牌,并进一步验证JWT包含适当的声明。

此示例使用PyJwt python library,它允许您编码和解码JSON Web令牌(JWT)

其他资源:

希望获得帮助。