JWT:带公钥/私钥的jwtk / jjwt

时间:2016-06-13 14:36:55

标签: java jwt jjwt

Auth0提供了两个JWT库,一个用于Node:node-jsonwebtoken,另一个用于Java:java-jwtturns out java-jwt不支持公钥/私钥对。{/ p>

但是,另一个java库jjwt库声称支持该功能。但是,文档未显示如何在jjwt中使用自己的公钥/私钥对。

我创建了私钥/公钥对,并在Node node-jsonwebtoken中成功使用了它:

var key = fs.readFileSync('private.key');
var pem = fs.readFileSync('public.pem');

var header = {...};
var payload = {...};

header.algorithm = "RS256";
var message = jsonwebtoken.sign(payload, key, header);
var decoded = jsonwebtoken.verify(message, pem, {algorithm: "RS256"});

但是我发现在jjwt的Java中没有办法做同样的事情。

任何人都有一个工作示例,说明如何在jjwt的Java中使用私有/公共密钥用于JWT?

1 个答案:

答案 0 :(得分:1)

以下是我所遵循的内容

创建密钥库

  

keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks   -storepass密码-validity 360 -keysize 2048

您可以从现有私钥和公钥创建密钥库。谷歌它如何做到这一点。

加载密钥库

    KeyStore ks = KeyStore.getInstance("JKS");
    InputStream readStream = // Use file stream to load from file system or class.getResourceAsStream to load from classpath
    ks.load(readStream, "password".toCharArray());
    Key key = ks.getKey("selfsigned", "password".toCharArray());
    readStream.close();

使用JJwt api签署消息

String s = Jwts.builder().setSubject("Abc").signWith(SignatureAlgorithm.RS512, key).compact();

使用JJwt api声明消息

X509Certificate certificate = (X509Certificate) keyEntry.getCertificate();
Jwts.parser().setSigningKey(certificate.getPublicKey()).parseClaimsJws(s).getBody().getSubject().equals("Abc");