nginx 代理请求以来自身份验证 http 请求的 header 值提供服务

nginx proxy request to service with header value from an authentication http request

这是我想要实现的目标:

我想使用 nginx 作为经典的反向代理来暴露服务器的资源。 在调用服务器之前,nginx 应该向令牌颁发者(内部服务)请求一个令牌,并将此令牌注入对服务器调用的身份验证 header。

是否可以使用 nginx 实现此目的? 我查看了 nginx 文档,我知道我可以使用 proxy_set_header 来修改代理到服务器的 headers。

更新

我能够使下面的解决方案起作用; here is a POC on github

如果您可以通过一些 HTTP header 使您的令牌发行者成为 return 令牌,例如 X-JWT-Token,这里有一个适合您的示例:

location /auth {
    internal;
    proxy_pass http://token-issuer;
    proxy_pass_request_body off;
    proxy_set_header Content-Length 0;
    # You can pass an additional data for the token issuer, for example
    # proxy_set_header X-Original-URI $request_uri;
}
location / {
    auth_request /auth;
    auth_request_set $token $upstream_http_x_jwt_token;
    proxy_set_header Authorization "Bearer $token";
    proxy_pass http://upstream;
}