使用带有Swift iOS的RS256或RS512validationJWT令牌

我正在Swift中构建一个iOS应用程序,它需要能够使用RS256或RS512使用公钥证书validationJWT令牌签名。

我一直在努力寻找支持这些function的库,但是在实现我发现的库时遇到了问题。

因此,我的问题是为Swift iOS应用程序实现此类function的推荐方法是什么?

理想的情况是能够在JWT.io上使用一个公认的框架。 JWT.io上唯一支持RS256或RS512的Swift库是以下库: https : //github.com/vapor/jwt

这个库支持的function是理想的,但它需要通过Swift Package Manager实现,并使用Vapor构建。 iOS目前不支持Swift Package Manager,但我读过有一些解决方法可以让swift包管理器与iOS应用程序一起使用。 如果库可以在iOS应用程序上运行,那么这些解决方法是愿意的。 但是,由于该库是为Vapor构建的,我的问题是,是否有可能让库在我正在构建的iOS应用程序上运行?

如果无法使用此库,是否还有其他建议使用的库? 如果没有,实施此请求function的推荐方法是什么? 是否有推荐的Objective-C库可以在应用程序上运行?

提前致谢!

编辑:通过validation我的意思是我想validation令牌中的签名是否正确,这意味着JWT令牌已使用服务器上的私钥进行签名,该私钥是应用程序上的公钥证书所对应的。 不只是解码Base64Check有效载荷。

编辑2:我想要实现的是支持非对称密钥的function,这意味着秘密不能存储在服务器和客户端应用程序上。 我试图实现应用程序仅包含非秘密信息,因此是公钥证书。

不确定你是否仍然坚持这一点,但我处于完全相同的情况,需要一段时间才能搞清楚。 我最终使用了JWT吊舱 ,并被本文推向了正确的方向。 我会总结一下我的发现。

由于Apple将OpenSSL放在了自己的安全库中,因此输入必须是包含公钥的自签名证书。 使用OpenSSL使用您的私钥作为输入执行以下操作:

openssl req -key private_key.pem -new -x509 -days 3650 -out selfsigned_cert.pem 

然后将PEM格式转换为DER,这基本上是删除b64装甲:

 openssl x509 -outform der -in selfsigned_cert.pem -out selfsigned_cert.der 

将.der文件添加到Xcode项目中的Supporting Files ,然后从磁盘读取证书数据,base64对其进行编码:

 NSURL *fileURL = [NSURL fileURLWithPath:[bundle pathForResource: @"selfsigned_cert" ofType:@"der"]]; NSData *certificateData = [NSData dataWithContentsOfURL:fileURL]; // Probably want to do a nil-check on certificateData here NSString *certificateStr = [JWTBase64Coder base64UrlEncodedStringWithData:certificateData]; 

然后将其插入JWT解码器:

 JWTBuilder *decodeBuilder = [JWTBuilder decodeMessage:token] // your JWT .secret(certificateStr) .algorithmName(algorithmName); // From your token or a predefined string NSDictionary *payload = decodeBuilder.decode; 

您可以通过检查构建器中的错误来检查解码/validation是否成功:

 if(decodeBuilder.jwtError != nil) { /* do stuff */ } 

编辑 :作为旁注。 转换为DER然后b64编码它似乎是多余的,它基本上只是从PEM格式中删除锚线。 我在磁盘上有.der文件的原因是因为如果需要,我们可以直接使用安全库。