如何从Safari作为客户端从WebAPI获取JWT承载令牌?

时间:2017-01-04 14:41:29

标签: ios asp.net-web-api safari jwt

概述

我有一个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。

1 个答案:

答案 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);
    });