[英]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應用程序無法從受保護的端點獲取數據,這實際上使它有點無用!
研究
看起來上面問題中的用戶至少從服務器返回一個令牌,這比我現在得到的更多。
有沒有人知道為什么會發生這種情況?
更新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.