簡體   English   中英

如何從Safari作為客戶端從WebAPI獲取JWT承載令牌?

[英]How to get JWT bearer token from WebAPI with Safari as the client?

概觀

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

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

問題

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

研究

Https請求授權不通過Safari工作

看起來上面問題中的用戶至少從服務器返回一個令牌,這比我現在得到的更多。

有沒有人知道為什么會發生這種情況?

更新05/01/2017

只是為了使這個問題和答案更加准確。 這不是持有人令牌生成或消費的問題,只是如果不設置async:false,Safari實際上不會向我的API發出AJAX請求。

在整天拔頭發后,我終於找到了解決方案。

對於遇到此問題的其他人,我修復它的方法是在我的請求中添加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);
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM