首页 > 解决方案 > nginx 代理请求使用来自身份验证 http 请求的标头值进行服务

问题描述

这就是我想要实现的目标:

在此处输入图像描述

我想使用 nginx 作为经典的反向代理来公开服务器的资源。在调用服务器之前,nginx 应该向令牌颁发者(内部服务)询问令牌,并将此令牌注入到服务器调用的身份验证标头中。

使用 nginx 可以实现这一点吗?我查看了 nginx 文档,我知道我可以使用它proxy_set_header来修改代理到服务器的标头。

更新

我能够使以下解决方案起作用; 这是github上的POC

标签: nginxnginx-reverse-proxy

解决方案


如果您可以让您的令牌颁发者通过一些 HTTP 标头返回令牌,例如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;
}

推荐阅读