簡體   English   中英

不記名令牌如何使用 Asp.net MVC 5 在基於令牌的身份驗證中工作?

[英]How Bearer token is working in token based authentication using Asp.net MVC 5?

我嘗試了與此網站鏈接相同的基於令牌的身份驗證。

它對我來說很好。 但我有兩個問題

  1. 添加以下代碼后,它會檢查來自客戶端的每個請求並驗證用戶。 如果成功,它會返回一些數據,如果不成功,它會顯示unauthorize

    但問題是,在我登錄( http://localhost:49501/Home )后,它僅在同一瀏覽器選項卡http://localhost:49501/Home/Data )上顯示成功

    但是在我登錄 (Tab1) 並嘗試訪問相同的 url ( http://localhost:49501/Home/Data ) 后,但在使用相同 chrome 瀏覽器的另一個選項卡 (tab2) 上,它顯示未授權錯誤

數據.cshtml

 var  authHeaders = {};
 authHeaders.Authorization = 'Bearer ' + sessionStorage.setItem('accessToken');

 $.ajax({
     url: "http://localhost:49501/api/values",
     type: "GET",
     headers: authHeaders,
     success: function (response) {
         console.log('Success');
     }
 });
  1. 使用 AJAX 發送令牌真的安全嗎? 因為所有的代碼都出現在客戶端。
  1. 我可以在線看到您的代碼中有一個問題:

    authHeaders.Authorization = 'Bearer ' + sessionStorage.setItem('accessToken');

sessionStorage.setItem方法有兩個強制參數,如果沒有它會報錯,當這個方法執行時,在開發者控制台下面肯定有一些 js 錯誤。 sessionStorage 的正確用法是:

// Save data to sessionStorage
sessionStorage.setItem('key', 'value');

// Get saved data from sessionStorage
let data = sessionStorage.getItem('key');

// Remove saved data from sessionStorage
sessionStorage.removeItem('key');

// Remove all saved data from sessionStorage
sessionStorage.clear();
  1. 回答您的第二個問題“使用 AJAX 發送令牌真的安全嗎?因為所有代碼都出現在客戶端。”

這個想法是使用在有限時間內有效的用戶憑據在服務器上生成一些 accessToken。 優點是您可以使用 authToken 授權后續請求直到它有效,並且您不需要存儲真實的用戶名和密碼來授權每個請求。 此外,如果會話處於活動狀態的時間較長,則通過添加一些機制來刷新安全令牌,您可以防止用戶注銷/重新授權請求。

為了清除安全問題,不會保存真實用戶憑據,並且身份驗證令牌具有有限的時間有效性。 例如,如果您的安全令牌的有效期為 30 分鍾,如果用戶在非活動會話 30 分鍾后離開機器,則無法使用此令牌。

您還可以在會話中每隔幾分鍾重新生成安全令牌並在后台更新會話存儲以提高安全性。 如果機器是私有的,那么將它們保存在本地機器上也不是那么不安全,但對於公共機器,我們也可以確保我們在注銷/超時時清除任何會話存儲,如果保持不變,那么令牌也會在一段時間后過期。

希望能幫助到你

暫無
暫無

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

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