2017-01-04 88 views
1

概述如何使用Safari作爲客戶端從WebAPI獲取JWT持票人令牌?

我有一個WebApi 2.0項目,它使用JWT令牌來保護端點。當用戶登錄到我的Web應用程序時,向API發出AJAX請求,API向用戶生成並返回一個不記名令牌,然後將其保存在sessionStorage客戶端,以便可以對受保護的端點進行請求。

請注意,我的web應用程序和API都使用CORS通過https託管。

問題

使用火狐,Chrome,Internet Explorer和邊緣時,這一切工作正常。但是,當我通過iPhone或iPad登錄到我的Web應用程序時,API甚至會被調用,因此不會返回令牌。這意味着我的Web應用程序無法從受保護的端點獲取數據,這實際上使其有點無用!

研究

Https requests with Authorization not working via Safari

它看起來像用戶在上面的問題是至少得到一個令牌從服務器,這比我在的那一刻找回。

有沒有人有任何洞察,爲什麼會發生這種情況?

更新2017年5月1日

只是爲了這個問題,並回答更準確。這對於不記名的令牌生成或消費來說並不是問題,簡單地說,Safari不會在沒有設置async:false的情況下向我的API發出AJAX請求。

回答

0

整天拉我的頭髮後,我終於想出了一個解決方案。

對於其他人是有這個問題,我固定它的方式是通過增加異步:假了我的要求,像這樣:

$.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); 
    }); 
相關問題