OGeek|极客世界-中国程序员成长平台

标题: ios - 如何在 iOS 上获取 Cognito 用户池 "sub"属性 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 13:17
标题: ios - 如何在 iOS 上获取 Cognito 用户池 "sub"属性

我正在使用“Cognito 用户池授权方”(无“AWS_IAM”选项,无自定义编码授权方)通过 API Gateway 调用 Lambda 方法并识别登录 iOS 客户端的用户。

在 Lambda 上,我使用通过 event.requestContext.authorizer.claims.sub 从 Cognito 用户池授权方获得的用户 ID(将用户 ID 与一些 DynamoDB 项目一起存储)。

我现在需要将其与 iOS 客户端中登录用户的 id 进行比较。

我找到了 [AWSIdentityManager defaultIdentityManager].identityId,但这(显然)返回了他 IdentityID(我可以在 Cognito 的 AWS 控制台中查找 --> Federated身份 --> 身份浏览器),与我在 Cognito 中看到的“子” id 不同 --> 用户池 --> 用户和组

我可以通过 AWS iOS 开发工具包获取“子”吗?

如果我无法获取它,我应该使用什么其他 id 参数来在 Lambda 和客户端上检索以识别当前客户端用户/发出 API 请求的用户?



Best Answer-推荐答案


看来我必须通过这样的用户详细信息专门请求属性:

AWSCognitoIdentityUserPool *pool = [AWSCognitoIdentityUserPool CognitoIdentityUserPoolForKey:AWSCognitoUserPoolsSignInProviderKey];
AWSCognitoIdentityUser *user = [pool currentUser];

NSString *mySub;

[[user getDetails] continueWithBlock:^id _Nullable(AWSTask<AWSCognitoIdentityUserGetDetailsResponse *> * _Nonnull task) {
    if(!task.error){
        AWSCognitoIdentityUserGetDetailsResponse *response = task.result;
        NSArray<AWSCognitoIdentityProviderAttributeType*> *userAttributes = response.userAttributes;
        for (AWSCognitoIdentityProviderAttributeType *attr in self.userAttributes) {
            if ([attr.name isEqualToString"sub"]) {
                mySub = attr.value;
            }
        }
    } else {
        NSLog(@"Error fetching Cognito User Attributes: %@", task.error.localizedDescription);
    }
}];

关于ios - 如何在 iOS 上获取 Cognito 用户池 "sub"属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43144135/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4