nginx - 如何将 auth_request 发送到 nginx 中的可变 URI?

标签 nginx authorization auth-request

我正在尝试使用 auth_request模块检查是否允许用户访问某个文件。用户在 /my/download/uri/<File ID> 发布请求.我希望授权请求发布在 auth_service:9999/files/<File ID> .我的配置的相关部分如下:

location /my/download/uri {
    auth_request /auth/files/$uri;
    alias /my/file/directory;
}
location /auth {
    internal;
    proxy_pass http://auth_service:9999/;
    proxy_pass_request_body off;
    proxy_set_header Content-Length "";
}

该请求由授权服务接收,但实际上是在 /files/$uri ;变量未放置。我尝试通过 set 准备好 URI变量第一,但无济于事。如何让 nginx 正确引导授权请求?

(注意:我知道我可以通过 X-Original-URI 将原始请求包含在授权请求的 header 中。但是,这意味着我必须对授权服务器上的完整 URI 进行额外处理才能获取相关数据,如果有一种方法可以首先将授权请求发布到正确的 URI,我宁愿不这样做。)

最佳答案

您不能在 auth_request 中使用变量,这显然是 nginx 的设计选择
https://trac.nginx.org/nginx/ticket/761
我通过反复试验想出了这个。我无法将 $uri 放入变量中,不知道为什么。

location ~ /my/download/uri/(.*) {
    set $key $1
    auth_request /auth;
    alias /my/file/directory;
}
location /auth {
    internal;
    proxy_pass http://auth_service:9999/$key;
    proxy_pass_request_body off;
    proxy_set_header Content-Length "";
}

关于nginx - 如何将 auth_request 发送到 nginx 中的可变 URI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60989302/

相关文章:

spring-boot - 我可以在 oauth/check_token 端点中附加一些信息并在授权服务器上检索它吗?

php - 使用 auth_request 模块的 Nginx 身份验证

mysql - 免费的BSD。 nginx、php-fpm、PDO_mysql 驱动程序不起作用

java - Haproxy 错误网关 502

security - JsonWebToken : activity-based expiration vs issuing time-based expiration

authentication - 使用 auth_request 模块和外部身份验证 API 的 Nginx 反向代理 - 错误 404

NGINX:主位置 block 覆盖子目录位置?

使用带有 nginx rsync 的 docker 的 Symfony 缓存权限

routes - Laravel 路由组使用或中间件的条件

mobile - 尝试从移动应用登录时出现openid一般授权错误