【问题标题】:AWS Cognito Federated Identity Pool - Role on AuthenticationAWS Cognito 联合身份池 - 身份验证角色
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-12-22
    • 2019-08-15
    • 2023-04-03
    • 2018-11-07
    • 2016-12-29
    • 1970-01-01
    • 2018-02-11
    • 2018-01-29
    • 1970-01-01
    相关资源
    最近更新 更多