我正在尝试弄清楚如何根据 nginx(plus)服务器内的授权状态正确处理请求场景。
jwt 认证文档似乎只扩展了 jwt 中的声明,而不是如何使用指令进行广泛检查。具体来说,我正在寻找如何处理的例子;
- 未经授权的请求(例如重定向到 idp、根据请求 uri 设置 returnURL 参数)
- 无效的 jwt 签名等等
实施指南为此样板提供服务;
proxy_cache_path /var/cache/nginx/jwk levels=1 keys_zone=jwk:1m max_size=10m;
server {
listen 80; # Use SSL/TLS in production
location / {
auth_jwt "closed site";
auth_jwt_key_cache 1h;
auth_jwt_key_request /_jwks_uri; # Keys will be fetched by subrequest
proxy_pass http://my_backend;
}
location = /_jwks_uri {
internal;
proxy_method GET;
proxy_cache jwk; # Cache responses
proxy_cache_valid 200 12h;
proxy_pass https://idp.example.com/oauth2/keys; # Obtain keys from here
}
}
我以为付费的 nginx 模块可以做比这更花哨的事情。我可以使用哪个指令来检查 jwt 状态,或者我应该考虑自己编写一个吗?
答案1
经过一番研究,很明显,Nginx 加上 jwt 模块与上述需求无关。Nginx jwt_auth 指令基本上只是成功或失败。挂钩到此过程的选项要么是可以映射到已验证的 jwt 状态(例如声明检查)的堆叠布尔结果,要么需要委托给 40X 状态代码处理程序。
例如(伪代码);
error_page 401 /401
location /401 {
302 http://<my_idp_server>/$args
}