Https请求授权不通过Safari工作

时间:2016-02-28 16:14:23

标签: angularjs https safari asp.net-core

上下文

使用Safari(IOS和MacOS)通过HTTPS(两者一起)使用Authorization标头的XHR请求不会到达服务器。但它适用于IE,Chrome和Firefox。

我使用Letsencrypt生成的有效证书,浏览器不显示有关它的警告。

在Safari的Web检查器上,这些XHR尝试获取结果,直到超时并且没有显示错误。

我有一个域名,没有子域名。

测试

  • 授权标头+ HTTPS =>不工作
  • 授权标头+无HTTPS(HTTP)=>作品
  • 无授权标头+ HTTPS =>作品

代码

我使用拦截器设置授权标头。

this.request = (config) => {
    config.headers = config.headers || {};
    var authData = localStorageService.get('authorizationData');
    if (authData && config.url && !config.url.endsWith("/token")) {
        config.headers = {
            "Authorization": 'Bearer ' + authData.access_token
        };
        config.withCredentials = true;
    }
    return config;
}

有没有人遇到过同样的问题?

更新1

Safari + HTTPS +“授权”标题有问题。 如果我通过“MyHeader”重命名“Authorization”,并在服务器上进行一些修改以使用“MyHeader”令牌检索我的持有者令牌,那么一切都运行良好。

在“safari”中使用HTTPS,“授权”标题是受保护的字吗?

4 个答案:

答案 0 :(得分:18)

我还遇到了类似于safari的问题,其中标题中的“授权”未在GET请求中发送,但结果却很简单。

我只是在请求网址的末尾添加了一个'/',它对我有用。

例如:将URL从'/ token'更改为'/ token /'。

答案 1 :(得分:0)

当通过safari发出的HTTP请求发送给任何url时,其中包含诸如logintoken等之类的单词... safari会自动添加Accept-Encoding标头,而该标头会损坏

答案 2 :(得分:0)

要解决此问题,您需要访问正在运行代码的设备并更改可防止跨站点跟踪的safari设置,因此对我来说很好。

答案 3 :(得分:0)

在我的情况下,使用Laravel,只是.htaccess删除的斜线。发生重定向时,由于明显的原因,不会转发标头。