如何发送nginx的基本身份验证和API身份验证的承载令牌

pn9klfpd  于 2023-10-17  发布在  Nginx
关注(0)|答案(1)|浏览(186)

我正在尝试在nginx上使用反向代理沿着基本认证。我的API有这样一种设计,其中一些rest调用是开放的,而另一些则需要一个承载令牌。我看到一个老帖子,有人给出了一个想法,在请求中使用一个单独的变量,并将其发送给API。但我希望如果变量在查询中不可用,则不向API发送承载令牌。以下是我的配置:

location / {
                
                 auth_basic "Restricted Content";
                 auth_basic_user_file /etc/nginx/.htpasswd;
                
                 proxy_http_version 1.1;
                 proxy_pass_request_headers on;
                 proxy_set_header Host $host;
                 proxy_set_header X-Real-IP $remote_addr;
                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                 proxy_set_header Accept-Encoding "";
                 proxy_set_header Authorization "Bearer $arg_token";
                 proxy_pass_header  Authorization;
 
                 #proxy_redirect off;
                 proxy_pass https://192.168.0.37/myapi/;
                 #proxy_set_header Host $host;
                 proxy_redirect default;
                  
        }

所以我不能发送请求到nginx服务:
http://my-server-ip/api/v1/customer?id=12345&token= 0 pyLQi 6CcHtoEJojPTt 48 qEnqDo/8 NGc但我希望当我需要访问一个开放的API URL时,不需要在请求中发送任何令牌,但使用上述设置,我必须发送令牌,即使是空字符串,因为我的API可以忽略此令牌

http://my-server-ip/api/v1/allcustomers?token=''

有没有可能避免发送空令牌,并在nginx配置中解决这个问题,如果在请求中没有找到令牌,则添加空的承载令牌?

hsgswve4

hsgswve41#

您可以添加其他位置块以适应不同的身份验证方案。例如,如果在位置“/API”上有需要承载令牌的API端点,则可以在不进行服务器级身份验证的情况下写入位置块。类似地,如果你有需要认证的开放端点,你可以在这个块中添加NGINX认证参数。

相关问题