Auth0提供了两个JWT库,一个用于Node:节点-jsonwebtoken,另一个用于Java:java-jwt。事实证明表示java-jwt不支持公钥/私钥对。
然而,另一个java库,jjwt库,声称支持这个特性。但是,文档并没有说明如何在jjwt中使用自己的公钥/私钥对。
我创建了私钥/公钥对,并在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中做同样的事情。
任何人都有一个工作示例,说明如何在Java中使用私钥/公钥用于JWT和jjwt
发布于 2016-06-13 17:16:50
以下是我所遵循的
创造钥匙
密钥工具-genkey -keyalg RSA -alias自签名-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");https://stackoverflow.com/questions/37792562
复制相似问题