使用AWS Cognito,我可以在给定禁用的未经身份验证的IdentityId的情况下解析经过身份验证的IdentityId吗?

Eri*_*ver 14 javascript authentication amazon-web-services amazon-cognito

我有一个JavaScript Web应用程序,支持Cognito未经身份验证的身份.我正在试图找出如何识别DISABLED未经身份验证的IdentityId的链接身份验证IdentityId.

第一个未经身份验证的用户通过身份获得IdentityId AWS.config.credentials.get.内部CognitoIdentityCredentials使用getId生成一个新的未经身份验证的IdentityId.

let unathenticatedIdentityId;

const AWS = require('aws-sdk');
AWS.config.region = region;
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId
});
AWS.config.credentials.get(err => {
    unathenticatedIdentityId = AWS.config.credentials.identityId;
});
Run Code Online (Sandbox Code Playgroud)

然后,我们的用户通过身份验证到Cognito用户池amazon-cognito-identity-js,未经身份验证的IdentityId将更改为与其Cognito登录相关联的经过身份验证的IdentityId.未经身份验证的IdentityId会自动标记,DISABLED并在内部链接到经过身份验证的IdentityId.

let authenticatedIdentityId;

const { CognitoUserPool, CognitoUser, AuthenticationDetails } = require('amazon-cognito-identity-js');
const Pool = new CognitoUserPool({
    UserPoolId,
    ClientId,
});
const authDetails = new AuthenticationDetails({
    Username,
    Password,
});
const user = new CognitoUser({
    Pool,
    Username,
});
user.authenticateUser(authDetails, {
    onSuccess: (session) => {
        AWS.config.credentials.params.Logins = {
            [PoolProviderName]: session.idToken.jwtToken,
        };
        AWS.config.credentials.expired = true;

        AWS.config.credentials.refresh(err => {
            authenticatedIdentityId = AWS.config.credentials.identityId;
        });
    },
});
Run Code Online (Sandbox Code Playgroud)

我有价值unathenticatedIdentityId,authenticatedIdentityId但我没有在AWS Cognito API中看到解决方案DISABLED unauthenticatedIdentityId已经链接到的问题authenticatedIdentityId.相反,我没有找到识别IdentityIds链接到的方法authenticatedIdentityId.该describeIdentity API会告诉我说unauthenticatedIdentityIdDISABLED,它没有Logins,但它并不指向链接authenticatedIdentityId.

如何使用linked/DISABLED unauthenticatedIdentityId的值来解析值authenticatedIdentityId

N.K*_*N.K 3

我有一个应用程序,它使用 AWS Cognito 来获取身份 ID,然后可能对其进行身份验证。这种情况是,客户端首先以未经身份验证(访客)的身份使用应用程序,然后使用 Facebook 登录,使他/她自己成为经过身份验证的用户,AWS 会为经过身份验证的用户保留给定的身份 ID,因为他是新用户。现在,问题来了,当您注销该应用程序,而其他人想要以未经身份验证甚至经过身份验证的方式使用该应用程序时。Cognito 会错误提示该身份 ID 的访问被禁止,因为它已经链接到之前用户的 Facebook 帐户。

Cognito移动 SDK有一种内置方法来处理此问题。他们在使用时缓存身份 ID,这导致了您所看到的问题。当您注销时,您需要清除该缓存。我不确定您使用的是哪个 SDK,但在 iOS 中是AWSCognitoIdentityProvider.clear(),在 Android 中是CognitoCachingCredentialsProvider.clear() 。同样,如果您使用Cognito Sync,该客户端中有一个方法可以擦除缓存的 ID 和同步数据。

另请查看https://aws.amazon.com/blogs/mobile/understanding-amazon-cognito-authentication/

希望您也关注https://aws.amazon.com/blogs/mobile/using-the-amazon-cognito-credentials-provider/