【问题标题】:How to persist bearer token on client side如何在客户端持久保存不记名令牌
【发布时间】:2014-03-19 14:00:03
【问题描述】:

我正在尝试了解 ASP.NET Web API 2 中基于声明的身份验证。在我的应用程序中,我使用了 VS 2013 模板,该模板实现了 OAuth 2.0 并使用了不记名令牌(我记得是 JWT)。我的问题是 - 在客户端保留令牌的最佳方式是什么。在他的书中,Badrinarayanan Lakshmiraghavan 将不记名令牌描述为

不记名令牌就像现金:发现者、保管者。

因此,将其保存到 cookie 中是否安全?这是否意味着任何人将窃取 cookie 将获得对应用程序的完全访问权限?另一方面,我可以在将令牌保存到 cookie 之前使用哈希加密令牌。会足够安全吗?还有其他选择吗?我见过很少有人在 stackoverflow 上提出类似的问题,但从未找到令人满意的答案。

【问题讨论】:

    标签: security cookies asp.net-web-api access-token claims-based-identity


    【解决方案1】:

    将其保存到 cookie 中是否安全?

    没有。 Cookie 可以通过 XSS 攻击(和其他载体)被盗 此外,这可能会受到 CSRF 的影响,因为任何请求都会自动提交 cookie。

    我可以在将令牌保存到 cookie 之前使用哈希加密令牌

    这也行不通。散列不是一种安全的加密方式(而且不允许解密)

    还有其他选择吗?

    基本上,您应该通过安全连接 (HTTPS) 将令牌提供给用户,但他们应该手动提交它以确保安全(再次通过 HTTPS)

    【讨论】:

    • '基本上,您应该通过安全连接 (HTTPS) 将令牌提供给用户,但他们应该手动提交它以确保安全(再次通过 HTTPS)'。仍然没有完全回答这个问题。是不是说只要我用HTTPS就可以用cookie?
    • 没有。 Cookie 可以通过 XSS 攻击轻松窃取。 Cookie 也会随任何 Web 请求自动提交,因此它们容易受到跨站点请求伪造的影响。查看 (owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29) 了解更多信息。
    • Web API 2 中不记名令牌的默认时间跨度为 14 天。那你如何在客户端保存这个令牌呢?
    • 啊。如果不记名令牌在 14 天后过期,您可以将其存储在 cookie 中。重要的是不要将 cookie 用于永久机密。除了不记名令牌之外,请务必使用随机令牌支持您的状态更改操作(如果您的用户更改设置、创建/删除东西、购买物品)以保护 CSRF。
    • 这不能回答问题。 JWT令牌应该如何在客户端持久化?
    猜你喜欢
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 2012-08-23
    • 2010-11-30
    相关资源
    最近更新 更多