提问者:小点点

验证特定JWT声明(iss、aud等)的NGINX JWT身份验证


希望NGINX基于OAuth2令牌对传入请求进行身份验证,包括验证特定令牌声明,例如“aud”受众声明、“iss”发行者声明等。

ngx_http_auth_jwt_模块(http://nginx.org/en/docs/http/ngx_http_auth_jwt_module.html)仅验证令牌以确保其由预期的一方和有效期签名。

问题是,如果您使用云IdP(例如Azure AD),上述验证是不够的,因为用于签署令牌的密钥在不同的客户租户之间共享。因此,令牌中的声明需要额外验证,包括发行者、受众等。

NGINX如何做到这一点?以下模块支持索赔验证,但现已存档:https://github.com/auth0/nginx-jwt


共1个答案

匿名用户

ngx_http_auth_jwt_module公开了包含从jwt有效负载解码的声明的变量,包括< code>aud和< code>iss,它们将相应地出现在变量< code>$jwt_claim_aud和< code>$jwt_claim_iss中。您可以在嵌入变量部分的文档中了解更多信息。

有了这些变量,您可以将它们与auth_jwt_require指令结合使用,以在访问阶段验证声明:

auth_jwt_require 定义 JWT 验证的其他条件。该值可以包含文本、变量及其组合。仅当所有值都不为空且不等于“0”时,身份验证才会成功。

map $jwt_claim_iss $valid_jwt_iss {
    "good" 1;
}
...
auth_jwt_require $valid_jwt_iss;

还有一点,虽然ngx_http_auth_jwt_module是商业发行的一部分(如果你已经有了Nginx Plus,你绝对应该利用它),但社区也为Nginx编写了相当多的免费JWT模块。其中一些还支持变量和声明验证。