【发布时间】:2018-04-05 03:04:27
【问题描述】:
我有 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
}
我不确定导致此错误的原因可能是什么。可能是配置中设置的第一个凭据提供程序,不能更改?
【问题讨论】:
-
[link] (docs.aws.amazon.com/cognito/latest/developerguide/…) 建议维护一个提供者并管理其中的登录映射。我是否需要在这里遵循相同的逻辑并保留一个实现 AWSIdentityProviderManager 协议的类?但是,如果我想将我的未授权身份保存在单独的池中怎么办?
标签: ios authentication amazon-cognito