Компания 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 ответ:
Поле 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]; }