如何在客户端持久保存不记名令牌
Posted
技术标签:
【中文标题】如何在客户端持久保存不记名令牌【英文标题】: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 之前使用哈希加密令牌。会足够安全吗?还有其他选择吗?我见过很少有人在 *** 上提出类似的问题,但从未找到令人满意的答案。
【问题讨论】:
【参考方案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令牌应该如何在客户端持久化?以上是关于如何在客户端持久保存不记名令牌的主要内容,如果未能解决你的问题,请参考以下文章
如何在请求标头上调用需要不记名令牌的 NSwag 客户端方法?
流动客户端主题时如何在 C# HttpClient 中设置 OIDC/OAuth 不记名令牌