authentication - 如果 JWT 被盗怎么办?

标签 authentication access-token jwt

我正在尝试使用 JWT 为我的 RESTful API 实现无状态身份验证。

据我所知,JWT 基本上是在 REST 调用期间作为 HTTP header 传递的加密字符串。

但是如果窃听者看到请求并窃取 token 怎么办?那他就可以用我的身份伪造请求了?

实际上,这个问题适用于所有基于 token 的身份验证

如何防止这种情况发生?像 HTTPS 这样的安全通道?

最佳答案

我是一个节点库的作者,该库可以相当深入地处理身份验证,express-stormpath ,所以我会在这里补充一些信息。

首先,JWT 通常加密。虽然有一种方法可以加密 JWT(请参阅: JWEs ),但由于多种原因,这在实践中并不常见。

接下来,任何形式的身份验证(无论是否使用 JWT)都会受到 MitM 攻击(中间人)攻击。当攻击者可以在您通过互联网发出请求时查看您的网络流量时,就会发生这些攻击。这是您的 ISP、NSA 等可以看到的内容。

这就是 SSL 有助于防止的情况:通过加密来自计算机的网络流量 -> 在进行身份验证时使用某些服务器,监视您网络流量的第三方无法看到您的 token 、密码或类似内容,除非他们“以某种方式能够获得服务器的 SSL 私钥的副本(不太可能)。这就是所有形式的身份验证都必须使用 SSL 的原因。

但是,假设有人能够利用您的 SSL 并能够查看您的 token :您的问题的答案是,攻击者将会能够使用该 token 来冒充您并向您的服务器发出请求。

现在,这就是协议(protocol)发挥作用的地方。

JWT 只是身份验证 token 的一种标准。它们几乎可以用于任何事情。 JWT 之所以很酷,是因为您可以在其中嵌入额外的信息,并且可以验证没有人弄乱它(签名)。

然而,JWT 本身与“安全”无关。出于所有意图和目的,JWT 或多或少与 API key 相同:只是用于针对某个服务器进行身份验证的随机字符串。

使您的问题更有趣的是所使用的协议(protocol)(最有可能是 OAuth2)。

OAuth2 的工作方式是,它旨在为客户端提供临时 token (如 JWT!),以便仅在短时间内进行身份验证!

这个想法是,如果您的 token 被盗,攻击者只能在短时间内使用它。

使用 OAuth2,您必须经常向服务器重新验证自己的身份,方法是提供您的用户名/密码或 API 凭据,然后获取 token 作为交换。

因为这个过程时不时地发生,所以你的 token 会经常发生变化,这使得攻击者更难不断地冒充你而不经历很大的麻烦。

希望这对您有帮助^^

关于authentication - 如果 JWT 被盗怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34259248/

相关文章:

具有共享首选项的 Android 登录/注册

javascript - MEAN 应用程序错误预期对象

bash - 从 Bash 调用的 Expect 脚本的退出状态代码

C# 使用 REST API 连接到 Azure 媒体服务帐户

angular - 在 Angular 4 中处理来自 Api 的过期 token

azure-active-directory - AADSTS70002:验证凭据时出错。 AADSTS50126:无效的用户名或密码

forms - HTML Post 表单的身份验证 header

authentication - AuthorizationHandlerContext 中的声明在 HandleRequirementAsync 中为空

c# - 获取调用线程

c++ - 从另一个函数的 "if loop"内部调用/移动一个函数 - Qt,C++