【问题标题】:How Bearer token is working in token based authentication using Asp.net MVC 5?Bearer 令牌如何在使用 Asp.net MVC 5 的基于令牌的身份验证中工作?
【发布时间】:2019-07-19 15:57:57
【问题描述】:

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

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

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

    但问题是,在我登录后(http://localhost:49501/Home),它只在同一浏览器标签上显示成功http://localhost:49501/Home/Data)。

    但是在我登录(Tab1)并尝试访问相同的网址(http://localhost:49501/Home/Data)但在另一个具有相同 chrome 浏览器的选项卡(tab2)上,它显示 unauthorize 错误

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

【问题讨论】:

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


    【解决方案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 分钟后离开机器,则无法使用此令牌。

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

    希望对你有帮助

    【讨论】:

    • 如果时间到期是 10 小时,如果有人复制令牌并在另一台机器上运行它怎么办?他们还能登录吗?
    • 安全令牌不用于登录,它是在服务器成功登录后生成的,用于后续的请求授权。通过 https 请求的数据也被加密。如果有人可以跟踪您的网络以获取安全令牌,那么他将不知道参数用于什么目的或什么是有效数据,因为数据已加密。如果您使用的是http,那么它很容易被滥用
    • 如果您在安全网络或机器上,那么这与在不安全网络上的公共机器非常不同,并且网站在 http 上发送数据是真正的交易破坏者
    猜你喜欢
    • 2021-11-13
    • 2016-06-09
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 2015-10-07
    • 2017-09-13
    相关资源
    最近更新 更多