【问题标题】:AWS - Add identity provider for same Cognito Identity IDAWS - 为相同的 Cognito 身份 ID 添加身份提供商
【发布时间】:2017-01-05 00:42:11
【问题描述】:

我正在使用 AWS 开发工具包,将联合身份提供商与 Cognito 结合使用。现在,我正在这样做:

private void SetupCognitoStuff()
{
    _cognitoCredentials = new CognitoAWSCredentials(
        MY_IDENTITY ID, // Identity Pool ID
        _awsRegion); // Region

    if (_identityProviderName != null)
        _cognitoCredentials.AddLogin(_identityProviderName, _identityProviderToken);

    _identityId = GetIdentityId();
}

这可以很好地创建或检索用户的凭据,使用 Facebook 作为身份提供者。我还在应用的设置中缓存了 Cognito 身份 ID。

所以,现在假设用户下次使用我的应用时,他们会选择不同的登录提供商(比如说 Google)。我已经缓存了他们上次登录(通过 Facebook)时的 Cognito 身份 ID。当我这次实例化 CognitoAWSCredentials 时,我如何告诉它我想使用现有的 Cognito 身份 ID,并且应该添加 Google 作为第二个身份提供者,而不是创建一个全新的 Cognito 身份?

the documentation for the raw API,应该是可以的:

合并身份

如果您为登录而不是 当前链接到给定的身份,但链接到另一个 身份,两个身份合并。一旦合并,一个身份 成为所有关联登录的父/所有者,另一个是 禁用。在这种情况下,父/所有者的身份 ID 是 回来。如果此值,您应该更新本地缓存 不同(如果您在 AWS 移动开发工具包或适用于浏览器中 JavaScript 的 AWS 开发工具包)。

如果是这种情况,那么当使用不同的身份提供者调用我的上述函数时,它如何知道(即我如何告诉它)使用哪个现有身份 ID?

this page 看来,它似乎可以通过原始 API 通过调用 GetCredentialsForIdentity 并在“IdentityId”字段中传入现有身份 ID 并在“登录”字段中传入新的身份提供者信息来完成:

请求语法

{

"CustomRoleArn": "string",

"IdentityId": "string",

"Logins": 

    {

        "string" :

            "string"

    } 
}

我只是不确定如何使用 CognitoAWSCredentials 类将其转换为 SDK。

【问题讨论】:

    标签: amazon-web-services aws-sdk amazon-cognito federated-identity


    【解决方案1】:

    通过提供者 1 进行身份验证后,使用提供者 2 令牌更新凭据对象的登录映射。 您需要更新凭证对象的 Logins 映射以包含 Google 的映射。您可以弄清楚它是如何为您的 sdk 完成的。例如。对于 javascript,你可以这样做

    AWS.config.credentials.params.Logins['accounts.google.com'] = googleToken;
    

    Javascript reference

    【讨论】:

    • 在此之后,您应该能够在身份浏览器的“链接登录”下看到这两个登录。
    • 好的,但是用户不是必须在同一个会话中同时登录 Facebook 和 Google 吗?我不认为这是用户可能会做的。
    • 我说的是第二次(在不同的日子),用户忘记了他们第一次使用的身份提供者并选择了不同的身份提供者的情况。由于我已经缓存了认知身份 ID,看来我应该能够提供它来链接它们。
    • Cognito 需要来自链接提供商的令牌才能访问经过身份验证的 id。您不能只提供 ID 以将新登录名链接到该身份。两者链接后,您只需要一个,要添加一个新的,您需要同时拥有两者。同样,如果您决定稍后添加 Twitter,则需要 Facebook 或 Google 之一。
    • 不,每个身份一个
    猜你喜欢
    • 2020-07-06
    • 2020-04-25
    • 2019-03-30
    • 2016-10-07
    • 2020-08-14
    • 1970-01-01
    • 2018-11-06
    • 2019-03-04
    • 2018-10-08
    相关资源
    最近更新 更多