![](/img/trans.png)
[英]AWS: How to properly authenticate a user against Cognito Pool and use it for Cognito Federated Identity?
[英]AWS Cognito Federated Identity Pool - Role on Authentication
我有2个身份池-一个用于Unauth(仅设置了Unauth角色),另一个用于联合身份(FB和Google-仅设置了Auth角色)。
我有一个iOS应用程序,其中包含2个实现AWSIdentityProviderManager协议的类-GuestProvider返回一个空的登录名,而FBProvider填充登录名中的FB令牌。
当我启动该应用程序并以访客身份浏览时,它可以工作。类似地,如果我启动该应用程序并直接登录FB,它也可以使用适当的身份验证角色。
当我以来宾身份登录然后切换到FB时,问题就来了-尽管我获得了Auth令牌并将其设置在Provider中并更新defaultServiceConfiguration,但是Lambda调用失败并出现AccessDenied错误-日志显示它仍然具有unauth角色。 如果我启动应用程序并通过FB登录(不会先去访客),则不会发生这种情况。
这些是用于为用例设置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中设置的凭据提供程序,不能更改吗?
我建议使用一个身份池。 当用户从Guest切换到Authenticated时,只需将identityId和提供者令牌(在登录映射中)传递给GetCredentialsForIdentity。 这会将相同的identityId链接到提供者(Facebook)用户。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.