Используя AWS Cognito, я могу разрешить аутентифицированный идентификатор IdentityId, если отключен неаутентифицированный IdentityId?
У меня есть веб-приложение JavaScript, которое поддерживает неподтвержденные идентификаторы Cognito. Я пытаюсь выяснить, как идентифицировать связанный аутентифицированный IdentityId для DISABLED
неаутентифицированного IdentityId.
Первым пользователям, не прошедшим проверку подлинности, выдается IdentityId через AWS.config.credentials.get
. Internal 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;
});
Затем наш пользователь аутентифицируется в пул пользователей Cognito через amazon-cognito-identity-js
, а неаутентифицированный IdentityId изменяет аутентифицированный IdentityId, связанный с их входом в Cognito. Неаутентифицированный 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;
});
},
});
У меня есть значение для unathenticatedIdentityId
и authenticatedIdentityId
, но я не вижу способа в API AWS Cognito, чтобы решить, что DISABLED
unauthenticatedIdentityId
связан с authenticatedIdentityId
. И наоборот, я не вижу способа определить, какие идентификаторы были связаны с authenticatedIdentityId
. describeIdentity API скажет мне, что unauthenticatedIdentityId
есть DISABLED
и что у него нет Logins
, но он не указывает на связанный authenticatedIdentityId
.
Как я могу с только указать значение связанного/отключенного unauthenticatedIdentityId
, разрешить значение authenticatedIdentityId
?
Ответы
Ответ 1
У меня есть приложение, которое использует AWS Cognito для получения идентификатора идентификатора и, возможно, его аутентификации. Ситуация заключается в том, что клиент сначала использует приложение как неавторизованный (гость), а затем регистрируется в Facebook, делая его аутентифицированным, и AWS сохраняет указанный идентификатор личности для аутентифицированного пользователя, потому что он является новым пользователем. Теперь проблема возникает, когда вы выходите из приложения, а кто-то еще хочет использовать это приложение как не прошедшее проверку подлинности или даже аутентифицированное. Cognito будет ошибочно заявлять, что доступ к идентификационному идентификатору запрещен, поскольку он уже был связан с предыдущей учетной записью пользователя Facebook.
Для мобильных SDK предусмотрен встроенный способ. Они кэшируют идентификатор идентификатора при его использовании, что вызывает проблему, которую вы видите. Когда вы выйдете из системы, вы захотите очистить этот кеш. Я не уверен, какой SDK вы используете, но в iOS это AWSCognitoIdentityProvider.clear() и CognitoCachingCredentialsProvider.clear() в Android. Аналогично, если вы используете Cognito Sync, в этом клиенте есть метод, который уничтожит кешированный идентификатор и данные синхронизации.
Также посмотрите https://aws.amazon.com/blogs/mobile/understanding-amazon-cognito-authentication/
Надеюсь, вы также следуете https://aws.amazon.com/blogs/mobile/using-the-amazon-cognito-credentials-provider/