将访问令牌存储在客户端浏览器的会话存储中是否安全?

问题描述 投票:0回答:1

我正在 Web API 中使用基于令牌的身份验证来对用户进行身份验证。我正在使用客户端浏览器会话存储来存储访问令牌。这样做安全吗? 我应该把它存放在哪里才能更安全。

$('#btnLogin').click(function() {
    $.ajax({
        // Post username, password & the grant type to /token
        url: '/token',
        method: 'POST',
        contentType: 'application/json',
        data:
            {
            username: $('#txtUsername').val(),
            password: $('#txtPassword').val(),
            grant_type: 'password'
        },
        //response(Access Token) stores inside session storage of Client browser.
        success: function(response) {
                sessionStorage.setItem("accessToken", response.access_token);
asp.net-web-api oauth access-token
1个回答
4
投票

使用

localStorage
sessionStorage
存储客户端令牌以对您的 api 执行后续经过身份验证的请求是完全安全的,只要您在 api 中采取了良好的措施来管理该令牌并保证其安全:

  • 生成的令牌不包含部分或全部凭据(用户或密码)。

  • 令牌不仅仅是base64(用户名:密码),因为它可以轻松解码并危及用户凭据。

  • 令牌有一定期限。

  • 您正在使用 https 来调用您的 api,以确保请求和响应是加密的。因此,任何“偷看”的人在发出请求时都看不到令牌或凭据。

  • 令牌不包含敏感信息

  • 令牌已签名(这太棒了!,这取决于您生成的令牌类型),因此没有人可以篡改令牌,以防令牌与用户 ID 关联或包含过期本身。

  • 令牌不短(长度),或者容易“猜测”、生成(想想暴力攻击)。签名确实对此有所帮助,尤其是在令牌本身的过期情况下(例如,请参阅 JWT 令牌)。

-

本地或会话存储与 cookie 一样安全,这样看。如果客户端的设备(cookie 或本地存储)受到损害,那么整个事情都会受到损害。所以到那时它不会有太大区别。

© www.soinside.com 2019 - 2024. All rights reserved.