概述
我有一个WebApi 2.0项目,它使用JWT令牌来保护端点。当用户登录我的Web应用程序时,会向API发出AJAX请求,该请求生成并向用户返回一个承载令牌,然后将其保存在sessionStorage客户端,以便可以对受保护的端点发出请求。 / p>
请注意,我的Web应用程序和API都使用CORS托管在https上。
问题
使用Firefox,Chrome,Internet Explorer和Edge时,一切正常。但是,当我通过iPhone或iPad登录我的Web应用程序时,API甚至会被调用,因此不会返回任何令牌。这意味着我的Web应用程序无法从受保护的端点获取数据,这实际上使它有点无用!
研究
Https requests with Authorization not working via Safari
看起来上面问题中的用户至少从服务器上获取了一个令牌,这比我现在得到的更多。
有没有人知道为什么会发生这种情况?
更新05/01/2017
只是为了使这个问题和答案更加准确。这不是持有人令牌生成或消费的问题,只是Safari不会在没有设置async的情况下向我的API实际发出AJAX请求:false。
答案 0 :(得分:0)
整天拔头发后,我终于找到了解决方案。
对于遇到此问题的其他人,我修复它的方法是在我的请求中添加async:false,如下所示:
$.ajax({
type: 'POST',
url: apiBase + 'OAuth/Token',
data: loginData,
async: false // Adding this fixed my issue.
}).done(function (data) {
sessionStorage.setItem("tokenKey", d.access_token);
});