如何防止/覆盖Safari中的授权标头?

时间:2016-04-22 09:06:02

标签: javascript jquery ajax safari

我在/下有网页,需要基本身份验证。在/api/*下提供REST API,它需要在Authorization标头中传递JWT令牌。

在Chrome中,它运行正常:当我加载网页时,它会要求我提供基本凭据,然后网页会在授权标题中向/api/*和JWT执行AJAX请求。

在Safari中,所有AJAX请求都是在Authorization标头设置为Basic凭证的情况下发送的,并且不允许在Authorization标头中设置JWT ...

这种情况有解决办法吗?

我正在为这样的AJAX请求设置JWT:

$.ajaxSetup({
  headers: {'Authorization': accessToken}
});

2 个答案:

答案 0 :(得分:2)

我遇到了这个问题,可能是Safari中的一个错误。

来自Safari的请求:

enter image description here

Wireshark中的相同请求:

enter image description here

解决方案:请勿使用基本身份验证或更改授权标头名称(例如,使用X-My-Api-Auth)。

答案 1 :(得分:1)

我遇到了类似的情况,它在Chrome / Firefox中运行良好,但是Edge和移动浏览器存在问题。我唯一的问题是我无法更改用于JWT身份验证(授权)的标头。

因此,我在客户端应用程序中为JWT令牌使用了自定义标头:

$.ajaxSetup({
  headers: {'X-JWT': accessToken}
});

在我的Web服务器配置(Nginx)中,我用自定义的JWT标头Authorization覆盖了X-JWT标头:

        underscores_in_headers on;

        location /api/ {
                auth_basic off;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-NginX-Proxy true;
                proxy_pass http://127.0.0.1:8002/;
                proxy_set_header Authorization $http_x_jwt;
                proxy_ssl_session_reuse off;
                proxy_set_header Host $http_host;
                proxy_redirect off;
        }