Компания Amazon Cognito в комплект identityId с использованием проверки подлинности разработчик в obj с


Я пытаюсь аутентифицировать своего пользователя, используя аутентифицированные удостоверения Cognito и разработчика. Мой вопрос заключается в том, как установить identityId на правильный, возвращаемый из моего бэкенда разработчика в iOS с помощью objective-c?

Если я делаю вызовы вручную в коде или с помощью postman, правильный идентификатор возвращается моим сервером, и Cognito распознает его и правильно меняет токены.

Фреймворк iOS, по-видимому, сам присваивает identityId, который не является правильным. Я действительно изо всех сил пытаюсь понять документацию, поскольку большая ее часть устарела и расплывчата.

Вот мой код ниже:

NSLog(@"Complete login");

    NSMutableDictionary *merge = [NSMutableDictionary dictionaryWithDictionary:self.credentialsProvider.logins];
    [merge addEntriesFromDictionary:logins];

    self.credentialsProvider.logins = merge;

    // Force a refresh of credentials to see if we need to merge
    task = [self.credentialsProvider refresh];

    NSLog(@"Complete login 2-- %@", self.credentialsProvider.identityId); //The identityId assigned is incorrect...
    NSLog(@"Complete login 2-- %@", self.credentialsProvider.identityPoolId); //The identityPoolId is correct

НЕКОТОРАЯ ЯСНОСТЬ НИЖЕ: Вот как это работает до сих пор: 1 - при запуске приложения его автоматически назначает случайный identityId от amazon (таким образом, пользователь изначально не проходит проверку подлинности). 2-пользователь вводит свои учетные данные, затем мой код делает запрос URL к моему бэкенду, который возвращает действительный токен и правильный identityId для имени пользователя и пароля. 3-Теперь это новое identityId должен быть инициализирован в коде каким-то образом, чтобы переопределить старый не прошедший проверку identityId. 4-новый idendityId и токен, возвращенные с моего сервера, должны быть отправлены в Cognito для окончательной аутентификации, и Cognito возвращает дополнительную аутентификацию. Когда я говорю вручную, я посылаю запрос через почтальона.

Короче говоря: 1. Как изменить / установить идентификатор личности? 2. Как я могу отправить обновленные учетные данные, полученные от моего бэк-энда в моем клиенте, в Cognito?

1 8

1 ответ:

Поле IdentityId в экземпляре AWSCognitoCredentialsProvider имеет атрибут только для чтения, поэтому оно не может быть изменено после инициализации. Единственный способ установить его-это инициализация.

id<AWSCognitoCredentialsProvider> credentialsProvider =
   [[AWSCognitoCredentialsProvider alloc]
        initWithRegionType:<Region>
          identityProvider:identityProvider
             unauthRoleArn:nil
               authRoleArn:nil];

После аутентификации пользователя не забудьте обновить карту Логинов следующим образом:

credentialsProvider.logins = @{DeveloperProviderName: userIdentifier}
[credentialsProvider refresh];

Источник: http://docs.aws.amazon.com/cognito/latest/developerguide/developer-authenticated-identities.html

P. s.: убедитесь, что поставщик удостоверений реализован правильно и в метод обновления вы должны установить identityId

- (AWSTask *)refresh {
    /*
     * Get the identityId and token by making a call to your backend
     */
    // Call to your backend

    // Set the identity id and token
    self.identityId = response.identityId;
    self.token = response.token;
    return [AWSTask taskWithResult:self.identityId];
}