AppAuth-iOS-ObjC: сбой при архивировании/разархивировании OIDAuthStateIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 AppAuth-iOS-ObjC: сбой при архивировании/разархивировании OIDAuthState

Сообщение Anonymous »

Я хотел бы использовать метод PerformActionWithFreshTokens AppAuth. Для этого необходимо использовать OIDAuthState, возвращаемый authStateByPresentingAuthorizationRequest, при создании токенов доступа и обновления. Я хочу сохранить этот OIDAuthState в связке ключей по соображениям безопасности, а затем использовать его позже, когда потребуется обновление токена. Кажется, я не могу правильно заархивировать и разархивировать сохраненное значение из цепочки для ключей.
У меня есть два метода: (1) используется для преобразования OIDAuthState в NSString для хранения в нем. Связка ключей и (2) используются для преобразования NSString из Связки ключей в OIDAuthState. Вот первое:

Код: Выделить всё

NSData *checkEncoding;
- (NSString *)authStateToString:(OIDAuthState *)authState {
NSError *errRet;
//NSData *authStateData = [NSKeyedArchiver archivedDataWithRootObject:authState];
NSData *authStateData = [NSKeyedArchiver archivedDataWithRootObject:authState
requiringSecureCoding:NO error:&errRet];
checkEncoding = authStateData;
NSString *authString = [[NSString alloc] initWithData:authStateData
encoding:NSUnicodeStringEncoding];
NSLog(@"ToString length = %ld, authStateData length = %ld",
(unsigned long)authString.length, (unsigned long)authStateData.length);
return authString;
}
А вот и второе:

Код: Выделить всё

- (OIDAuthState *)stringToAuthState:(NSString *)authString {
NSError *errRet;
NSData *authStateData = [authString dataUsingEncoding:NSUnicodeStringEncoding allowLossyConversion:NO];
NSLog(@"ToAuthState length = %ld, authStateData length = %ld, checkEncoding = %d",
(unsigned long)authString.length, (unsigned long)authStateData.length, [authStateData isEqualToData:checkEncoding]);
OIDAuthState *authState = [NSKeyedUnarchiver unarchivedObjectOfClass:[OIDAuthState class]
fromData:authStateData error:&errRet];
//OIDAuthState *authState = [NSKeyedUnarchiver unarchiveTopLevelObjectWithData:authStateData error:&errRet];
//OIDAuthState *authState = [NSKeyedUnarchiver unarchiveObjectWithData:authStateData];
/* NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:authStateData];
OIDAuthState *authState = [unarchiver decodeObject];
[unarchiver finishDecoding]; */
return authState;
}
(Множественные попытки разархивирования не имеют значения, поскольку все они терпят неудачу, и версия без комментариев, вероятно, является правильной/нерекомендуемой.)
Обратите внимание на утверждения NSLog в каждом из них, которые, кажется, указывают на проблему. Для authStateToString NSLog выходные данные: «Длина ToString = 7930, длина authStateData = 15860». Для stringToAuthState NSLog выходные данные: «Длина ToAuthState = 7930, длина authStateData = 15862, checkEncoding = 0». NSStrings в обоих методах равны в соответствии с isEqualToString.
Итак, я предполагаю, что OIDAuthState не может быть повторно создан, поскольку преобразование для версий NSString происходит, но не восстанавливается то же самое представление NSData; закодированная версия составляет 15860 байт, а декодированная версия – 15862 байта, а isEqualToData возвращает false.
Я отмечаю, что вызывается метод NSKeyedArchiver класса OIDAuthState encodeWithCoder как и ожидалось при кодировании состояния. Соответствующий метод NSKeyedUnarchiver initWithCoder не вызывается, но это неудивительно, поскольку передаваемые NSData, вероятно, недействительны.
Я пробовал несколько dataUsingEncoding типы кодирования с наибольшим количеством ошибок (результирующий NSData имеет нулевую длину). NSUnicodeStringEncoding — единственный, который, похоже, создает экземпляры NSData соответствующей длины. Я пробовал установить для параметра «requireingSecureCoding» значение ДА и НЕТ. Я пробовал установить для параметраallowLossyConversion значение YES и NO.
Я открыт для других методов сохранения OIDAuthState, но кажется, что то, что я сделал, должно быть действительным. Может кто-нибудь подсказать, почему я не могу правильно разархивировать?

Подробнее здесь: https://stackoverflow.com/questions/790 ... dauthstate
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»