NSData не примет правильную строку в кодировке base64

Реализация аутентификации JSON Web Token на стороне iOS (7). Это'работает хорошо. Мое приложение получает токены и может выполнять с ними аутентифицированные звонки на мой сервер.

Теперь я хочу, чтобы мой код на стороне клиента проверял дату истечения срока действия токена, чтобы он мог знать, когда необходимо выполнить повторную аутентификацию. Проверка даты истечения срока действия на токене аутентификации JWT проста. Токен авторизации - это 3 JSON-объекта в кодировке base64, разделенные символом «.» - Метка времени истечения находится в среднем блоке, в поле, называемомext, Это'с секунд с эпохи юникса.

Так что мой кодвыглядит так:

- (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;
}

Проблема проста. Средний двоичный объект base64 при анализе NSData -initWithBase64EncodedString равенnil - и этоплохо. я

Мы проверили BLOB-объект base64 и, похоже, он действителен. Мой сервервозвращает фиктивные данные на данный момент, так что здесьПример блоба:eyJlbWFpbCI6ImZvb0BiYXIuYmF6IiwiYWNjb3VudElkIjoiMTIzNDUtNjc4OTAtYmFyLWJheiIsImV4cCI6MTM5MDkxNTAzNywiaWF0IjoxMzkwOTE0MTM3fQ

Он декодирует в:

{"email":"[email protected]","accountId":"12345-67890-bar-baz","exp":1390915037,"iat":1390914137}

Я проверил это здесь:Http: //www.base64decode.orgI»

мы использовали NSData 'Методы base64, которые успешно применяются в моем приложении - я нене думаю, что яЯ делаю что-нибудь особенно сломанное здесь. Но я'м все уши! Есть идеи?

Ответы на вопрос(5)

Ваш ответ на вопрос