我正在尝试使用Cognito和开发人员身份验证的身份对我的用户进行身份验证。我的问题是如何使用objective-c将identityId设置为从iOS中的开发人员后端返回的正确ID?
如果我在代码中手动进行调用或使用 postman 进行调用,则服务器将返回正确的ID,并且Cognito会识别出该ID,并正确交换 token 。
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(因此用户最初未经身份验证)。
2-用户输入凭据,然后我的代码向后端发送URL请求,该URL返回有效的 token 以及用户名和密码的正确identityId。
3-现在需要以某种方式在代码中初始化此新的identityId,以覆盖旧的未经身份验证的identityId。
4-从我的服务器返回的新idendityId和 token 需要发送到Cognito进行最终身份验证,然后Cognito返回更多身份验证。当我手动说的时候,我是通过 postman 发送请求的。
简而言之:
1:如何更改/设置我的identityId?
2:如何将从客户端后端收到的更新凭据发送给Cognito?
最佳答案
AWSCognitoCredentialsProvider实例中的identityId字段具有只读属性,因此初始化后就无法更改。设置它的唯一方法是在其初始化中。
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
附言:确保您正确地实现身份提供者,并且在刷新方法中应设置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];
}