Auth0提供了两个JWT库,一个用于Node:node-jsonwebtoken,一个用于Java:java-jwt。它原来是java的智威汤逊不支持公钥/私钥对。
但是,另一个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"});
Run Code Online (Sandbox Code Playgroud)
这是我所遵循的
创建密钥库
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();
Run Code Online (Sandbox Code Playgroud)
使用JJwt api对消息进行签名
String s = Jwts.builder().setSubject("Abc").signWith(SignatureAlgorithm.RS512, key).compact();
Run Code Online (Sandbox Code Playgroud)
使用 JJwt api 领取消息
X509Certificate certificate = (X509Certificate) keyEntry.getCertificate();
Jwts.parser().setSigningKey(certificate.getPublicKey()).parseClaimsJws(s).getBody().getSubject().equals("Abc");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3786 次 |
| 最近记录: |