【问题标题】:Is is safe to store access token in session storage of client browser?将访问令牌存储在客户端浏览器的会话存储中是否安全?
【发布时间】:2018-11-15 16:00:22
【问题描述】:

我在 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】:

    使用localStoragesessionStorage 存储客户端令牌以对您的api 执行后续经过身份验证的请求是非常安全的,只要您在api 中采取了适当的措施来管理该令牌并保持安全:

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

    • 令牌不只是 base64(username:password),因为它很容易被解码并破坏用户凭据。

    • 令牌有一定期限。

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

    • 令牌不包含敏感信息

    • 令牌已签名(这很棒!,这取决于您生成的令牌类型)所以没有人可以篡改令牌,以防令牌与用户 ID 相关联或包含过期自己。

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

    -

    本地或会话存储存储与 cookie 一样安全,请以这种方式看待。如果客户端的设备、cookie 或本地存储受到损害,那么整个事情都会受到损害。所以到那时不会有太大的不同。

    【讨论】:

    • 本地存储和会话存储容易受到 XSS 攻击,因此不建议在其中存储令牌/会话。过期时间根本无济于事,好像在您加载页面时已经发生了永久性 XSS 攻击,攻击可能已经发生了。令牌和会话应该存储在仅 HTTP cookie 中
    猜你喜欢
    • 2019-02-20
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2018-06-10
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多