AWS Cognito联合身份池 - 身份验证角色

时间:2017-10-24 10:44:22

标签: ios authentication amazon-cognito

我有2个身份池 - 一个用于Unauth(仅包含Unauth角色集),另一个用于联合身份(FB和Google - 仅包含Auth角色集)。

我有一个iOS应用程序,其中有2个类实现了AWSIdentityProviderManager协议 - GuestProvider返回空登录名,FBProvider填充登录中的FB令牌。

当我启动应用程序并以访客身份浏览时,它会起作用,同样如果我启动应用程序并直接登录到FB,它也可以使用正确的身份验证角色。

当我以Guest身份登录然后切换到FB时出现问题 - 虽然我获取了Auth令牌并在Provider中设置并更新了defaultServiceConfiguration,但是Lambda调用因AccessDenied错误而失败 - 日志显示它仍然具有unauth角色。如果我启动应用程序并通过FB登录(不首先访问Guest),则不会发生这种情况。

这些是为resp用例设置AWS配置的函数:

func initializeGuestCredentialsProvider() {
// AWS
credentialsProvider = AWSCognitoCredentialsProvider(
regionType: Constants.AWS_REGION,
identityPoolId: Constants.COGNITO_UNAUTH_IDENTITY_POOL_ID);

let configuration = AWSServiceConfiguration(
region: Constants.AWS_REGION,
credentialsProvider: credentialsProvider
);

AWSServiceManager.default().defaultServiceConfiguration = configuration
}

func initializeFBCredentialsProvider() {
credentialsProvider = AWSCognitoCredentialsProvider(
regionType: Constants.AWS_REGION,
identityPoolId: Constants.COGNITO_IDENTITY_POOL_ID,
identityProviderManager: FacebookProvider());

let configuration = AWSServiceConfiguration(
region: AWSRegionType.USWest2,
credentialsProvider: credentialsProvider
);

AWSServiceManager.default().defaultServiceConfiguration = configuration

}

我不确定这个错误的原因是什么。可能是在config中设置的第一个凭据提供程序,无法更改?

1 个答案:

答案 0 :(得分:0)

我建议使用单个标识池。当用户从Guest切换到Authenticated时,只需将identityId和提供者令牌(在登录映射中)传递给GetCredentialsForIdentity。这会将相同的identityId链接到提供者(Facebook)用户。