现在,我正在使用Ingress-Nginx作为外部流量的路由服务。但是,很少有文章介绍Ingress如何播放JWT身份验证来保护内部API。 有人可以分享一些信息吗?
答案 0 :(得分:1)
根据研究:
由RFC 7519定义的不同的身份验证API调用已以OAuth 2.0访问令牌的形式合并。
这些是从客户端传递到API服务器的身份验证凭据,通常作为HTTP标头携带。
JSON Web令牌(JWT)是其中之一。
根据文档:
JSON Web令牌(JWT)是一种紧凑的,URL安全的表示方式 声称在两方之间转移。智威汤逊的索赔 被编码为JSON对象,用作JSON的有效负载 Web签名(JWS)结构或JSON Web的纯文本 加密(JWE)结构,使索赔数字化 消息验证码对签名或完整性进行保护 (MAC)和/或加密。
可以使用诸如kubernetes nginx-ingress或nginxinc 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)
其他资源:
希望获得帮助。