我正在使用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。
答案 0 :(得分:1)
通过提供程序1进行身份验证后,使用提供程序2令牌更新凭据对象的登录映射。 您需要更新凭据对象的登录地图以包含Google的对象。你可以弄清楚你的sdk是如何完成的。例如。对于javascript,你可以做到
AWS.config.credentials.params.Logins['accounts.google.com'] = googleToken;