java - 如何在 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
谁能告诉我我做错了什么?
解决方案
推荐阅读
- android - kotlin 中的回收站查看项目点击监听器
- python - for 循环在 for 循环中给出关键错误我正在给出列表
- c# - MaskedTextBox 在 C# 中进行验证
- c++ - c++ Qt中的计算属性
- php - 查询数据和排列数据 Laravel
- javascript - Response.Redirect(" ") 或 window.location=""
- php - Laravel 雄辩的构建查询
- c++ - 为什么我的 lambda 函数没有被执行?
- javascript - 学习 API:无法读取 forEach 循环的属性
- java - 如何解析 json 键值对,其中一个键具有 json 值作为字符串