gpt4 book ai didi

ios - NSData 不接受有效的 base64 编码字符串

转载 作者:IT王子 更新时间:2023-10-29 08:02:14 27 4
gpt4 key购买 nike

我正在 iOS (7) 前端实现 JSON Web Token 身份验证。它工作得很好。我的应用程序接收 token ,并可以使用它们对我的服务器进行经过身份验证的调用。

现在,我希望我的客户端代码检查 token 的到期日期,以便它知道何时重新进行身份验证。检查 JWT 授权 token 的到期日期非常简单。授权 token 是 3 个 base64 编码的 JSON blob,由“.”分隔。 - 到期时间戳位于中间的 blob 中,位于名为 ext 的字段中。自 unix 纪元以来已过去数秒。

所以我的代码看起来像这样:

- (NSDate*) expirationDate
{
if ( !_tokenAppearsValid ) return nil;

if ( !_parsedExpirationDate )
{
//
// Token is three base64 encoded payloads separated by '.'
// The payload we want is the middle one, which is a JSON dict, with
// 'exp' being the unix seconds timestamp of the expiration date
// Returning nil is appropriate if no 'exp' is findable
//

NSArray *components = [self.token componentsSeparatedByString:@"."];

NSString *payload = components[1];

NSData* payloadJsonData = [[NSData alloc]
initWithBase64EncodedString:payload
options:NSDataBase64DecodingIgnoreUnknownCharacters];

NSError* jsonError = nil;
NSDictionary* payloadJson = [NSJSONSerialization JSONObjectWithData:payloadJsonData options:0 error:&jsonError];
if ( payloadJson )
{
if ( payloadJson[@"exp"] )
{
NSTimeInterval timestampSeconds = [payloadJson[@"exp"] doubleValue];
_expirationDate = [NSDate dateWithTimeIntervalSince1970:timestampSeconds];
}
}

_parsedExpirationDate = YES;
}

return _expirationDate;
}

问题很简单。当 NSData -initWithBase64EncodedString 解析时,中间的 base64 blob 是 nil - 这很糟糕。

我检查了 base64 blob,它似乎是有效的。我的服务器目前正在返回虚拟数据,所以这是一个示例 blob: eyJlbWFpbCI6ImZvb0BiYXIuYmF6IiwiYWNjb3VudElkIjoiMTIzNDUtNjc4OTAtYmFyLWJheiIsImV4cCI6MTM5MDkxNTAzNywiaWF0IjoxMzkwOTE0MTM3fQ

它解码为:

{"email":"foo@bar.baz","accountId":"12345-67890-bar-baz","exp":1390915037,"iat":1390914137}

我在这里测试过:http://www.base64decode.org

我在我的应用程序的其他地方成功地使用了 NSData 的 base64 方法 - 我认为我在这里没有做任何特别糟糕的事情。但我洗耳恭听!有什么想法吗?

最佳答案

您的 Base64 字符串无效。它必须用 = 字符填充才能有长度是 4 的倍数。在您的例子中:"eyJlbWFp....MTM3fQ=="

使用此填充,initWithBase64EncodedString 正确解码 Base64 字符串。

关于ios - NSData 不接受有效的 base64 编码字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21406482/

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