代码之家  ›  专栏  ›  技术社区  ›  Liam neesan

在使用ASP.NET MVC 5的基于令牌的身份验证中,承载令牌是如何工作的?

  •  0
  • Liam neesan  · 技术社区  · 5 年前

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

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

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

      但问题是,我登录后( http://localhost:49501/Home )它显示了 成功 只有在 同一浏览器选项卡 ( http://localhost:49501/Home/Data )

      但是在我登录(tab1)并尝试访问同一个url之后( http://localhost:49501/home/data )但是在另一个带有相同chrome浏览器的选项卡(tab2)上,它显示 未授权错误

    数据集

     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发送令牌真的安全吗?因为所有的代码都出现在客户端。
    0 回复  |  直到 5 年前
        1
  •  1
  •   Pranav Singh    5 年前
    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。优点是您可以授权使用AuthToCo的后续请求,直到它是有效的,并且您不需要存储真实的用户名和密码来授权每个请求。还可以通过添加一些机制来刷新安全令牌,如果会话活动更长时间,则可以防止用户注销/重新授权请求。

    为了消除安全问题,不保存真实用户凭据,身份验证令牌具有有限的时间有效性。例如,如果您的安全令牌具有30分钟的有效性,如果用户在非活动会话30分钟后离开机器,则此令牌不能被使用。

    另外,您可以在会话和更新会话会话的背景下每隔几分钟重新生成安全令牌,以便进一步安全。此外,在本地机器上保存它们并不那么不安全,因为机器是私有的,但对于公共机器,我们也可以确保在退出/暂停时清除任何会话存储,如果离开,那么令牌也会在一段时间后过期。

    希望有帮助