Проверка подлинности пользователя Apigee, access_token и сеанс входа в кэш в iOS

Я новичок в Apigee и не могу обернуть голову вокруг этого. Я знаком с реализацией приложения для iOS, которое общается с базой данных через вызов веб-службы. Вызов будет включать передачу туда и обратно JSON или переменных через POST, GET и т. Д.

Поток пользователей, который я представляю, во многом похож на долгосрочное хранение токенов Facebook. Вот шаги:

  1. Введите имя пользователя и пароль для входа.
  2. Приложение запомнит access_token в цепочке для ключей.
  3. Access_token будет использоваться с любыми будущими запросами, такими как обновление профиля. Таким образом, пользователь не должен повторно входить в систему каждый раз, когда он / она использует приложение.
  4. Выйти очистит все токены.
  5. Если токен недействителен или срок его действия истек, приложение вернет пользователя для входа в систему.

Я взял несколько маршрутов и в итоге застрял на всех, когда дело доходит до Апиджи.

МАРШРУТ 1

Я позвонил в logInUser и получил взамен access_token.

    [self.apigeeDataClient logInUser:username password:password];

Все это хорошо, пока я не хочу обновить адрес электронной почты пользователя, используя код ниже.

    NSMutableDictionary *requestDict = [NSMutableDictionary dictionary];
    [requestDict setObject:email forKey:kDataEmail];

    NSString *url = [NSString stringWithFormat:@"%@/%@/%@/users/%@?access_token=%@", BASE_URL, UG_ORG_NAME, APP_NAME, [userData objectForKey:kDataUUID], self.accessToken];
    NSString *op = @"PUT";
    NSError *error;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:[NSDictionary dictionaryWithDictionary:requestDict]
                                                       options:0
                                                         error:&error];
    [self.apigeeDataClient apiRequest:url operation:op data:[NSString stringWithUTF8String:[jsonData bytes]]];

Кажется, что каждый раз, когда выдает сообщение об ошибке "Нет содержимого для сопоставления с объектом из-за конца ввода". Я проверил эту тему, но не повезло. Я убедился, что объект JSON не является нулевым. Я попытался изменить операцию с PUT на POST и GET. Ни один из которых не обновляет адрес электронной почты в базе данных.

МАРШРУТ 2

Вместо того, чтобы использовать apiRequest, я переключился на updateEntity.

    NSMutableDictionary *requestDict = [NSMutableDictionary dictionary];
    [requestDict setObject:email forKey:kDataEmail];
    [requestDict setObject:kDataUsers forKey:kDataType];
    [requestDict setObject:self.accessToken forKey:kDataAccessToken];
    NSString *entityID = [userData objectForKey:kDataUUID];
    [self.apigeeDataClient updateEntity:entityID entity:requestDict];

Это выглядит многообещающе, за исключением того, что я начал получать "У субъекта нет разрешения", как проблема, описанная в этой теме. Я попытался вызвать assignPermissions, как указано в документе Apigee, но это не решило проблему. Я даже предоставляю access_token с вызовом, хотя мне это и не нужно.

В попытке избежать вызова входа в систему также пытались вызвать storeOAuth2TokensInKeychain и retrieveStoredOAuth2TokensFromKeychain, упомянутые здесь. Это тоже не сработало.

Единственный способ устранить эту ошибку - вызвать logInUser перед вызовом updateEntity. Это означает, что пользователь должен будет входить в систему каждый раз, когда он / она хочет использовать приложение. Я знаю, что могу хранить имя пользователя / пароль в связке ключей. Но прежде чем я это сделаю, мне интересно, есть ли лучшее решение там.

Я знаю, что это длинный пост. Так что спасибо, что прочитали это далеко. Любые указатели очень ценятся.

0 ответов

Другие вопросы по тегам