我已经成功地将JJWT设置为在一系列web服务的身份验证过程中使用。问题是它们是在一个web服务中创建的,但在多个服务中进行身份验证。如何在确保所有web服务都使用相同的签名来验证传入的JWT的同时,成功且安全地使用签名?
// We need a signing key, so we'll create one just for this example. Usually
// the key would be read from your application configuration instead.
Key key = MacProvider.generateKey();
String compactJws = Jwts.builder()
.setSubject("Joe")
.signWith(SignatureAlgorithm.HS512, key)
.compact();我知道我可以使用普通的旧字符串来.signWith(Algorithm,String),但是我已经意识到使用标准的Java (字面意思)是不够安全的。我使用的内容类似于:
String compactJws = Jwts.builder()
.setSubject("Joe")
.signWith(SignatureAlgorithm.HS512, "shared complex passphrase")
.compact();发布于 2017-09-29 14:06:05
根据RFC 7518 - JSON Web Algorithms (JWA):
此算法必须使用与散列输出相同大小的密钥(例如,256位代表"HS256")或更大。(此要求基于NISTSP800-117 (sic) [NIST.800-107]的第5.3.4节( HMAC密钥的安全效果),其中规定有效安全强度为密钥安全强度的最小值和内部散列值大小的两倍。)
对于HS512,必须使用至少512位的密钥。
密钥需要随机选择。您可以使用MacProvider.generateKey();或其他随机生成器生成密钥,并将其分发到您的服务器(例如,以base64编码)
另一种方法是使用RSA密钥对。您使用私钥对令牌进行签名,使用公钥进行验证。所有服务都可以安全地发布和使用公钥
另请参阅https://security.stackexchange.com/questions/95972/what-are-requirements-for-hmac-secret-key
https://stackoverflow.com/questions/46457612
复制相似问题