如果智威汤逊被盗?
我正在尝试使用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凭据,然后获取令牌。
因为这个过程偶尔会发生,所以你的代币会经常变化,这样攻击者就不会经历很大的麻烦而不断冒充你。
希望这有助于^^