gpt4 book ai didi

Nginx - 如何创建将与 auth_request 模块一起使用的自定义请求

转载 作者:行者123 更新时间:2023-12-05 03:03:29 25 4
gpt4 key购买 nike

首先:我不是 nginx 专家。非常新手。

我正在尝试使用 nginx 进行身份验证来保护第 3 方软件(真的 - 只是验证请求是否具有有效的 OAuth2 Bearer token )

HTTP 请求的身份验证 header 中将包含一个 OAuth2 不记名 token 。

例如授权:不记名 eyJhbGciOiJSUzI1NiIsImtpZ....H5w

我有一个 OAuth2 服务器 (UAA),它有一个我可以调用的 api http://myuaa/check_token?token=eyJhbGciOiJSUzI1NiIsImtpZ....H5w如果 token 有效,取回 2XX 或 4XX。复杂的是该服务器确实需要基本身份验证才能调用/check_token 端点。

我曾尝试使用映射来解析授权 header 中的 token ,但没有成功。

有点不知所措。

也许这不适合 Nginx?

nginx.conf 的相关部分

# this map isnt working as I thought it might
http {
...
map $http_authorization $token {
~Bearer(?<token>abc) $token;
}

...

# test just to see if the authorization header is being parsed and passed - no luck
location /oauth {
proxy_set_header X-my-header $token;
proxy_set_header X-another-header value;
proxy_set_header Authorization "Basic basdasdfasdf";
proxy_pass http://localhost:8080;
}

对 nginx 保护的第三方服务器的预期请求:

<GET|POST|PUT|DELETE> /anyurl HTTP1/1.1
..
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZ....H5w
..

转发到 UAA 服务器以验证 token 的预期请求

GET /check_token?token=eyJhbGciOiJSUzI1NiIsImtpZ....H5w
..
Authorization Basic asfasdfdf
..

最佳答案

你的 map 指令不工作,命名组 token 以某种方式干扰 $token 变量,这些定义中的任何一个都可以工作:

map $http_authorization $token {
~^Bearer\s+([\S]+)$ $1;
}

map $http_authorization $token {
~^Bearer\s+(?<bearer>[\S]+)$ $bearer;
}

完整的工作配置如下所示:

map $http_authorization $token {
~^Bearer\s+(?<bearer>[\S]+)$ $bearer;
}

server {
...
location / {
auth_request /uaa;
...
}
location /uaa {
internal;
proxy_pass_request_body off;
proxy_set_header Authorization "Basic your_base64_auth_string";
proxy_set_header Content-Length "";
proxy_pass http://localhost:8080/check_token?token=$token;
}
}

关于Nginx - 如何创建将与 auth_request 模块一起使用的自定义请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53889510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com