将未经授权的 (jwt) 请求委托给 idp 服务器 (nginx)+

将未经授权的 (jwt) 请求委托给 idp 服务器 (nginx)+

我正在尝试弄清楚如何根据 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
}

相关内容