我正在阅读https://jwt.io/文档,发现实际上受支持的算法是
其中哪个最安全?
我知道双方(客户端和服务器)必须使用相同的算法,因此客户端和服务器端都必须支持它。
答案 0 :(得分:2)
选择实际上很少涉及安全性,而更多地是关于使用JWT的目的-谁可以创建/验证JWT,是否共享密钥,算法速度等。 RSA和ES使用公共密钥加密技术,因此用于一个受信方创建可以由另一方验证的令牌的情况(但另一方不能自己创建令牌)。 HMAC比RSA快得多,但要求签名者和验证者使用相同的密钥(这意味着它们都可以创建令牌)。
作为一个真实的示例,client authentication in OpenID可以使用JWT,该JWT是使用客户端和授权服务器共享的密钥进行HMAC签名的。但是,HMAC不适用于授权服务器发出的JWT令牌来表示客户端授权或ID令牌之类的算法,因为恶意的客户端应用程序随后可能会伪造这些令牌并假冒授权服务器。
从理论上讲,使用较大哈希值的算法会更强大(例如HS512与HS256),但实际上,与其他安全问题相比,破解系统中JWT算法的人不太可能成为主要问题。
对于加密站点,这可能是一个更好的问题,而不是SO,您应该在那里看看。例如,参见this answer和this one。