Objective-C:JWT-使用私钥的字符串数据使用RS256进行编码

时间:2018-09-23 09:57:46

标签: ios objective-c jwt

我正在使用此库对RS256令牌https://github.com/yourkarma/JWT进行编码

在文档中有一个处理RS256编码的示例

NSDictionary *payload = @{@"payload" : @"hidden_information"};
NSString *algorithmName = @"RS256";

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"secret_key" ofType:@"p12"];
NSData *privateKeySecretData = [NSData dataWithContentsOfFile:filePath];

NSString *passphraseForPrivateKey = @"secret";

JWTBuilder *builder = [JWTBuilder encodePayload:payload].secretData(privateKeySecretData).privateKeyCertificatePassphrase(passphraseForPrivateKey).algorithmName(algorithmName);
NSString *token = builder.encode;

现在,由于我只有一个类似这样的私钥字符串:

"-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEAtN7LQq7l9a9....SUug==\n-----END RSA PRIVATE KEY-----\n"

我想知道如何实现?显然我不需要密码。

预先感谢

1 个答案:

答案 0 :(得分:0)

事实证明,在一个同事的帮助下,这并不难;-)

这是解决方案:

NSDictionary *payload = @{@"payload" : @"hidden_information"};

id <JWTAlgorithmDataHolderProtocol> holder = [JWTAlgorithmRSFamilyDataHolder new]
    .keyExtractorType([JWTCryptoKeyExtractor privateKeyWithPEMBase64].type)
    .privateKeyCertificatePassphrase(nil)
    .algorithmName(JWTAlgorithmNameRS256)
    .secret(<string of the private key as above>);

JWTCodingResultType *result = [JWTEncodingBuilder encodePayload:payload]
    .addHolder(holder)
    .result;

NSString *token = result.successResult.encoded;
NSError *error = result.errorResult.error;