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;
}
这是我想要实现的目标:
我想使用 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;
}