在Web服务之间共享JJWT签名

时间:2017-09-27 21:37:26

标签: java jwt hmac jjwt

我已成功设置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(字面上)并不够安全。我使用的东西类似于:

String compactJws = Jwts.builder()
  .setSubject("Joe")
  .signWith(SignatureAlgorithm.HS512, "shared complex passphrase")
  .compact();

1 个答案:

答案 0 :(得分:1)

根据RFC 7518 - JSON Web算法(JWA):

  

与散列输出大小相同的密钥(例如,256位用于   " HS256")或更大版本必须与此算法一起使用。 (这个   要求基于第5.3.4节(HMAC的安全效果)   密钥)NIST SP 800-117(原文如此)[NIST.800-107],其中说明了   有效的安全强度是安全强度的最小值   密钥的大小和内部哈希值大小的两倍。)

您必须使用HS512至少512位的密钥。

需要随机选择密钥。您可以使用main()或其他随机生成器生成密钥并将其分发到您的服务器(例如,以base64编码)

另一种方法是使用RSA密钥对。您使用私钥对令牌和公钥进行签名以进行验证。所有服务都可以安全地发布和使用公钥

另见https://security.stackexchange.com/questions/95972/what-are-requirements-for-hmac-secret-key