gpt4 book ai didi

java - Poynt 在 JAVA 中从私钥创建 JWT

转载 作者:行者123 更新时间:2023-12-02 02:34:48 25 4
gpt4 key购买 nike

我正在尝试从 java 中的私钥创建 JWT。私钥位于文件中。

这是我的方法。

protected String prepareJWT() throws NoSuchAlgorithmException, InvalidKeySpecException, JOSEException {

String poyntPrivateKey = this.getPoyntPrivateKey();
byte[] privateBytes = poyntPrivateKey.getBytes();
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");

PrivateKey privateKey = keyFactory.generatePrivate(keySpec);

JWSSigner signer = new RSASSASigner((RSAPrivateKey) privateKey);
...

}

我在 keyFactory.generatePrivate(keySpec); 处收到异常,并显示消息:

java.security.InvalidKeyException: invalid key format

这里是getPoyntPrivateKey()

protected String getPoyntPrivateKey() {
File file = new File("resources/poynt_api_private_key.txt");
StringBuilder privateKeyBuilder = new StringBuilder();
String privateKey = privateKeyBuilder.toString();
try {
FileReader fr = new FileReader(file);
Scanner scanner = new Scanner(fr);
while(scanner.hasNextLine()) {
privateKeyBuilder.append(scanner.nextLine() + "\r");
}
scanner.close();
privateKey = privateKeyBuilder.toString();
} catch (Exception e) {
privateKey = "Error";

} finally {

}

return privateKey;

}

最佳答案

开始吧(使用 com.nimbusds.jwt.* 和 org.bouncycaSTLe.openssl.*):

    private static String getJWT() throws Exception{

File f = new File(privateKeyFile);
InputStreamReader isr = new InputStreamReader(new FileInputStream(f));

PEMParser pemParser = new PEMParser(isr);
Object object = pemParser.readObject();
PEMKeyPair kp = (PEMKeyPair) object;
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC");
RSAPrivateKey privateKey = (RSAPrivateKey) converter.getPrivateKey(kp.getPrivateKeyInfo());
pemParser.close();


// Create RSA-signer with the private key
JWSSigner signer = new RSASSASigner(privateKey);

// Prepare JWT with claims set
JWTClaimsSet claimsSet = new JWTClaimsSet();
claimsSet.setSubject(applicationId);
claimsSet.setAudience(Arrays.asList(apiEndpoint));
claimsSet.setIssuer(applicationId);
claimsSet.setExpirationTime(new Date(new Date().getTime() + 360 * 1000));

claimsSet.setIssueTime(new Date(new Date().getTime()));
claimsSet.setJWTID(UUID.randomUUID().toString());

SignedJWT signedJWT = new SignedJWT(new JWSHeader(JWSAlgorithm.RS256), claimsSet);

// Compute the RSA signature
signedJWT.sign(signer);

String s = signedJWT.serialize();
return s;
}

关于java - Poynt 在 JAVA 中从私钥创建 JWT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46544652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com