我不知道如何使用PKCS#8密钥对JWT进行签名。该密钥与以下密钥类似:
-----BEGIN PRIVATE KEY-----
MIGTAgEAMBNGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQgtbN7M/7webqa1i3k
3UiwERpWUIoRj6nebM7yRyFphVWgCgYIKoHihj0DAQehRANCAAQl6Z+2bWXLgxJC
J2It6UNYSuxios4A1A6/7/7hNs0y3Yus53q6RD1snvMU5yTBewrRALyDz/8MNADm
eN7dRD41
-----END PRIVATE KEY-----
在此SO答案中解释了该密钥:https://stackoverflow.com/a/54981397/1051180
我需要使用com.nimbusds库。我认为这应该是可行的,但找不到方法。我找到的最接近的答案是:https://stackoverflow.com/a/57437626/1051180
我设法用io.jsonwebtoken库对它进行了签名:
String token = Jwts.builder().signWith(getPrivateKey(), SignatureAlgorithm.ES256).compact();
private static PrivateKey getPrivateKey() {
PrivateKey key = null;
try (var pemParser = new PEMParser(privateKeyReader)) {
var keyInfo = (PrivateKeyInfo) pemParser.readObject();
key = new JcaPEMKeyConverter().getPrivateKey(keyInfo);
}
return key;
}
背景:我在一个.p8文件中获得了密钥。我使用它来签署JWT,JWT用于在登录Apple期间针对Apple服务器进行身份验证。
1条答案
按热度按时间zour9fqk1#
由于我手头没有苹果提供的私钥,我尝试使用以下命令自己生成一个:
下面的代码可以使用这样的PEM文件来签署一个令牌:
显然,苹果提供的PKCS#8文件中没有包含公钥。因此,上述创建
ECDSASigner
的方法失败,并出现"Missing PEM-encoded public key to construct JWK"
异常。下面的代码从此类PEM文件中加载私钥,并创建可用于签署令牌的ECDSASigner
示例。