我有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中设置的第一个凭据提供程序,无法更改?
答案 0 :(得分:0)
我建议使用单个标识池。当用户从Guest切换到Authenticated时,只需将identityId和提供者令牌(在登录映射中)传递给GetCredentialsForIdentity。这会将相同的identityId链接到提供者(Facebook)用户。