如果智威汤逊被盗?

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

AFAIK,JWT基本上是一个在REST调用期间作为HTTP头传递的encryptionstring。

但是如果窃听者看到了请求并窃取了令牌呢? 那么他可以用我的身份伪造请求?

实际上,这个问题适用于所有基于令牌的authentication

如何防止呢? 像HTTPS这样的安全通道?

我是一个处理身份validation的节点库的作者,在一定深度上expressionstormpath ,所以我会在这里附上一些信息。

首先,JWT通常encryption。 虽然有一种方法来encryptionJWT(参见: JWE ),但由于许多原因,这在实践中并不常见。

接下来,任何forms的身份validation(使用JWT或不使用JWT)都会受到MitM攻击(man-in-the-middle)攻击。 这些攻击发生在攻击者可以通过互联网发送请求时查看您的networkingstream量。 这是你的ISP可以看到的,NSA等等

这是SSL有助于防止的方法:通过encryption您的计算机上的networkingstream量 – >某些服务器在进行身份validation时,正在监视networkingstream量的第三方无法看到您的令牌,密码或类似的东西,除非它们以某种方式获取服务器的私有SSL密钥的副本(不太可能)。 这就是SSL对所有forms的authentication必不可less的原因。

但是,假设有人能够利用您的SSL并能够查看您的令牌:您的问题的答案是YES ,攻击者能够使用该令牌来模拟您并向您的服务器发出请求。

现在,这是协议进入的地方。

智威汤逊只是authentication令牌的一个标准。 他们可以用于任何东西。 JWT有点酷,原因是你可以在其中embedded额外的信息,并且你可以validation没有人干扰它(签名)。

但是,智威汤逊本身与“安全”无关。 对于所有意图和目的,JWT与API密钥大致相同:只是随机的string,用于对某个服务器进行身份validation。

是什么让你的问题更有趣,是使用的协议(最有可能的OAuth2)。

OAuth2的工作方式在于,它旨在为客户提供TEMPORARY标记(如JWT!),以进行仅用于短期的身份validation!

这个想法是,如果你的令牌被盗,攻击者只能使用它很短的一段时间。

使用OAuth2,您必须经常通过服务器重新进行身份validation,方法是提供用户名/密码或API凭据,然后获取令牌。

因为这个过程偶尔会发生,所以你的代币会经常变化,这样攻击者就不会经历很大的麻烦而不断冒充你。

希望这有助于^^