Bearer 令牌如何使用 Asp.net MVC 5 在基于令牌的身份验证中工作?

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

我试过基于令牌的身份验证,与此相同website link

它对我来说很好用。但是我有两个问题

  1. After I add the below code, it's checking for every request from the client and validate the user. If it success, it will return some data, if not, it will show unauthorize.

    But the problem is, After I logged in(http://localhost:49501/Home), it shows success only on same browser tab(http://localhost:49501/Home/Data).

    But After I logged in(Tab1) and I tried to visit same url (http://localhost:49501/Home/Data) but on another tab(tab2) with same chrome browser, it is showing unauthorize error

Data.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. Is it really secure to send the token using AJAX? Because all the codes are appearing on the client side.
  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. 回答你的第二个问题"Is it really secure to send the token using AJAX? Because all the codes are appearing on the client side."

想法是使用在有限时间内有效的用户凭据在服务器上生成一些 accessToken。优点是您可以使用 authToken 授权后续请求,直到它有效,并且您无需存储真实的用户名和密码来授权每个请求。此外,如果会话处于活动状态的时间较长,通过添加一些机制来刷新安全令牌,您可以阻止用户 logout/reauthorization 请求。

为消除安全隐患,不会保存真实用户凭据并且身份验证令牌的有效期有限。例如,如果您的安全令牌的有效期为 30 分钟,如果用户在非活动会话 30 分钟后离开计算机,则此令牌将无法使用。

您还可以在会话中每隔几分钟重新生成一次安全令牌,并在后台更新会话存储以进一步提高安全性。如果机器是私有的,那么将它们保存在本地机器上也不是那么不安全,但对于 public 机器,我们也可以确保我们清除 logout/time-out 上的任何会话存储,如果保持原样,那么令牌也会在之后过期一些时间。

希望对您有所帮助