AWS - 为相同的Cognito身份标识添加身份提供程序

时间:2016-08-29 04:33:49

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

我正在使用AWS SDK,使用带有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。

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

查看the documentation for the raw API,应该可以:

  

合并身份

     

如果您传入的令牌不是   目前链接到给定的身份,但链接到另一个   身份,两个身份合并。合并后,一个身份   成为所有关联登录的父/所有者,另一个是   禁用。在这种情况下,父/所有者的身份ID是   回。如果此值,您应该更新本地缓存   不同(如果你使用的是提供商,这是为你处理的   AWS Mobile SDK或浏览器中的AWS SDK for AWS。

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

this page开始,看起来可以通过调用GetCredentialsForIdentity并在" IdentityId"中传入现有身份ID,通过原始API完成。字段和"登录"中的新身份提供商信息字段:

  

请求语法

{

"CustomRoleArn": "string",

"IdentityId": "string",

"Logins": 

    {

        "string" :

            "string"

    } 
}

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

1 个答案:

答案 0 :(得分:1)

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

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

Javascript reference