使用Nginx在Swagger UI中覆盖授权标头

时间:2014-12-18 02:47:38

标签: nginx http-headers authorization swagger swagger-ui

我正在尝试使用当前的Nginx配置设置Swagger UI页面,但我遇到了HTTP授权标题的问题。 Nginx配置如下:

server {
    listen 80;
    server_name myapi.example.com;

    location / {
            proxy_pass http://127.0.0.1:9000;
            proxy_redirect off;
            proxy_buffering off;

            proxy_http_version 1.1;

            proxy_set_header Host $http_host;
            proxy_set_header X-NginX-Proxy true;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location ~ ^/(docs|api-docs) {
            auth_basic "Restricted";
            auth_basic_user_file /home/ubuntu/.htpasswd;

            proxy_pass http://127.0.0.1:9000;

            proxy_http_version 1.1;
    }
}

我正在尝试为有关文档的资源设置Basic auth,而其他API在承载方案之后有自己的授权引擎。例如,要访问网址https://myapi.example.com/docshttps://myapi.example.com/api-docs,我需要提供用户名和密码,并成功拨打https://myapi.example.com/myresource1我需要发送标头{{ 1}}在带有有效访问令牌的请求中。

此设置按预期工作,但通过Swagger UI除外。 “试用”功能会因发送错误的授权标头而中断。服务器不是接收Authorization: Bearer <token>格式的标头,而是使用用于访问文档页面的凭据接收Authorization: Bearer <token>

值得一提的是,标题的Swagger UI设置如下所示:

Authorization: Basic <value>

这在本地运行Swagger UI时有效,但在针对Nginx服务器运行时会中断。此外,如果我从Nginx配置中移除第二个位置(在window.authorizations.add("key", new ApiKeyAuthorization( "Authorization", "Bearer " + key, "header", ":")); /docs上放弃基本身份验证),一切正常。

1 个答案:

答案 0 :(得分:0)

在做了一些研究之后,我认为这是由于浏览器缓存了基本身份验证凭据并在后续请求中自动将其发送到标头中。

http://en.wikipedia.org/wiki/Basic_access_authentication

我决定遵循this article中的建议,并为文档和Swagger UI页面实现auth机制。