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

时间:2019-02-26 06:53:26

标签: ajax authentication asp.net-web-api model-view-controller asp.net-web-api2

我尝试过类似website link的基于令牌的身份验证。

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

  
      
  1. 添加以下代码后,它将检查来自客户端的每个请求并验证用户。如果成功,它将返回一些数据,否则,将显示未授权

         

    但是问题是,我登录( http://localhost:49501/Home )后,仅在相同的浏览器选项卡上显示成功 http://localhost:49501/Home/Data )。

         

    但是我登录(Tab1)并尝试访问相同的URL( http://localhost:49501/Home/Data )之后,但是在使用相同的Chrome浏览器的另一个标签(tab2)上,它显示取消授权错误

  2.   

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. 使用AJAX发送令牌真的安全吗?因为所有代码都出现在客户端。
  2.   

1 个答案:

答案 0 :(得分:1)

  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分钟后离开了计算机,则该令牌将无法使用。

您还可以每隔几分钟在会话中重新生成安全令牌,并在后台更新会话存储以进一步提高安全性。另外,如果机器是私有的,那么将它们保存在本地机器上并不是很不安全,但是对于公共机器,我们还可以确保在注销/超时时清除所有会话存储,如果保留,那么令牌也会在一段时间后过期。 / p>

希望有帮助