JWT 和类似方法的安全性如何?

Posted

技术标签:

【中文标题】JWT 和类似方法的安全性如何?【英文标题】:How secure is JWT and similar approaches? 【发布时间】:2014-10-21 08:20:48 【问题描述】:

我一直在阅读有关 JWTCSRF token 的信息,据我所知,它们是同一件事(如果我错了,请纠正我)。但我有一些疑问。所以我的问题是:

    JWT 真的安全吗? 因为令牌存在于客户端。我的Signed key 可以解码吗? 是否有任何其他方法可以在不将当前会话数据保存在服务器上的情况下验证用户? (可以加个链接吗?) 我的方式是JWT,验证用户安全吗?还是有更好的方法?

如果有帮助,我正在使用 Node.js 和 AngularJs 制作一个社交网站。

【问题讨论】:

【参考方案1】:

你对 JWT 和 CSRF Tokens 的看法是错误的。

JWT 是您签署或加密(或两者兼有)的一组声明。这与签名或加密的邮件相同。

CSRF 令牌通常是任意字符串,以防止来自恶意脚本的请求。这些字符串未加密或签名。

    JWE(加密)和 JWS(签名)使用 JWA 定义的算法。所有这些算法(椭圆曲线、RSA...)都足够强大,可以保护您的 JWT 输入。

    当你写Signed key 时,我想你是在谈论你的公钥。这与您提供公共证书或使用 S/MIME 签署电子邮件时完全相同。

    JWT 的目的不是存储会话数据,而是存储已签名或加密(或两者兼有)的声明。

    JWS 通常用于对用户进行身份验证。例如,OpenID Connect 使用 JWT over OAuth2。

【讨论】:

以上是关于JWT 和类似方法的安全性如何?的主要内容,如果未能解决你的问题,请参考以下文章

使用 REST API 如何进行 JWT 令牌安全管理?

使用 HTTP 基本身份验证获取 JWT 令牌的安全性如何?

将 Jwt 放入 https 获取请求中是不是安全?

如何从另一个微服务 Java 使用 JWT 安全微服务

如何安全地存储和处理 JWT 的密钥

如何在 Angular 8 中存储 jwt 令牌之类的数据?是不是有另一种使用本地存储或会话存储安全存储的方法?