首页 > 解决方案 > 如何在 swift 中使用 rsa 密钥签署我的 JWT?

问题描述

我正在尝试创建一个 JWT,为此我需要一个 RSA 密钥。我已经有一个工作 Java 代码,但我必须让它在 SWIFT 中工作。我有一个私钥,在 java 版本中用于通过以下方式创建 RSA 密钥:

private static RSAPrivateKey getPrivateKey(String key) {

    PrivateKey privateKey = null;
    final String algorithm = "RSA";
    try {
        byte[] keyBytes = Base64.decodeBase64(key.getBytes());
        KeyFactory kf = KeyFactory.getInstance(algorithm);
        EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
        privateKey = kf.generatePrivate(keySpec);
    } catch (Exception e) {
                                           
    }
}

然后使用此密钥创建算法Algorithm alg = Algorithm.RSA256(null, privateKey),然后使用该算法对 JWT 令牌进行签名。

这里使用的类来自 java.security、com.auth0 和 org.apache.commons.codec

我在swift中尝试的是将密钥(提供给上述函数的那个​​)放入文件中

-----BEGIN PRIVATE KEY-----
[the actual key]
-----END PRIVATE KEY-----

然后打电话

let path = Bundle.main.path(forResource: "privateKey", ofType: "key")
let privateKeyPath = URL(fileURLWithPath: path!)
let privateKey: Data = try Data(contentsOf: privateKeyPath, options: .alwaysMapped)
let jwtSigner = JWTSigner.rs256(privateKey: privateKey)
let signedJwt = try jwt.sign(using: jwtSigner)

但这给了我错误

"Provided private key could not be used to sign JWT", internalError: SwiftJWT.JWTError.(unknown context at $1047b9eec).InternalError.invalidPrivateKey)

我在这里使用的库是https://github.com/Kitura/Swift-JWT.git

谁能告诉我我做错了什么?

标签: javaswiftjwtrsa

解决方案


推荐阅读