我在/
下有网页,需要基本身份验证。在/api/*
下提供REST API,它需要在Authorization标头中传递JWT令牌。
在Chrome中,它运行正常:当我加载网页时,它会要求我提供基本凭据,然后网页会在授权标题中向/api/*
和JWT执行AJAX请求。
在Safari中,所有AJAX请求都是在Authorization标头设置为Basic凭证的情况下发送的,并且不允许在Authorization标头中设置JWT ...
这种情况有解决办法吗?
我正在为这样的AJAX请求设置JWT:
$.ajaxSetup({
headers: {'Authorization': accessToken}
});
答案 0 :(得分:2)
我遇到了这个问题,可能是Safari中的一个错误。
来自Safari的请求:
Wireshark中的相同请求:
解决方案:请勿使用基本身份验证或更改授权标头名称(例如,使用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;
}