gpt4 book ai didi

javascript - 使用 AWS Cognito 是否可以在给定禁用的未经身份验证的 IdentityId 的情况下解析经过身份验证的 IdentityId?

转载 作者:可可西里 更新时间:2023-11-01 01:43:45 26 4
gpt4 key购买 nike

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

首先,未经身份验证的用户会通过 AWS.config.credentials.get 获得一个 IdentityId。 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;
});

然后,我们的用户通过 amazon-cognito-identity-js 向 Cognito 用户池进行身份验证,未经身份验证的 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;
});
},
});

我有 unathenticatedIdentityIdauthenticatedIdentityId 的值,但我没有在 AWS Cognito API 中看到解决 DISABLED unauthenticatedIdentityId 已链接到 authenticatedIdentityId。相反,我看不到一种方法来识别哪些 IdentityId 已链接到 authenticatedIdentityIddescribeIdentity API 会告诉我 unauthenticatedIdentityIdDISABLED 并且它没有 Logins,但它不指向链接的 authenticatedIdentityId.

如何链接/禁用 unauthenticatedIdentityId 的值,解析值 authenticatedIdentityId

最佳答案

我有一个应用程序使用 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/

关于javascript - 使用 AWS Cognito 是否可以在给定禁用的未经身份验证的 IdentityId 的情况下解析经过身份验证的 IdentityId?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46044598/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com