Gestione delle risposte agli errori relativi all'esistenza degli utenti - Amazon Cognito

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Gestione delle risposte agli errori relativi all'esistenza degli utenti

Amazon Cognito supporta la personalizzazione delle risposte di errore restituite dai pool di utenti. Sono disponibili risposte di errore personalizzate per le operazioni di creazione e autenticazione utente, ripristino password e conferma.

Utilizza l'impostazione PreventUserExistenceErrors di un client di applicazioni di un bacino d'utenza per abilitare o disabilitare errori relativi all'esistenza degli utenti. Quando crei una nuova app, il client con l'API dei pool di utenti di Amazon Cognito PreventUserExistenceErrors è LEGACY o disabilitato per impostazione predefinita. Nella console Amazon Cognito, l'opzione Previeni gli errori di esistenza degli utenti, un'impostazione di ENABLED for, PreventUserExistenceErrors è selezionata per impostazione predefinita. Per aggiornare la PreventUserExistenceErrors configurazione, esegui una delle seguenti operazioni:

  • Modifica il valore PreventUserExistenceErrors tra ENABLED e LEGACY in una richiesta UpdateUserPoolClientAPI.

  • Modifica il client dell'app nella console Amazon Cognito e modifica lo stato di Previeni gli errori di esistenza degli utenti tra selezionato (ENABLED) e deselezionato (). LEGACY

Se questa proprietà ha un valore diLEGACY, il client dell'app restituisce una risposta di UserNotFoundException errore quando un utente tenta di accedere con un nome utente che non esiste nel tuo pool di utenti.

Quando questa proprietà ha un valore diENABLED, il client dell'app non rivela l'inesistenza di un account utente nel pool di utenti con un UserNotFoundException errore. Una PreventUserExistenceErrors configurazione di ENABLED ha i seguenti effetti quando invii una richiesta per un nome utente che non esiste:

  • Amazon Cognito risponde con informazioni non specifiche alle richieste API laddove la sua risposta potrebbe altrimenti rivelare l'esistenza di un utente valido.

  • Amazon Cognito restituisce una risposta generica di errore di autenticazione alle richieste di password dimenticata e alle richieste di autenticazione con flussi di autenticazione ad eccezione dell'autenticazione basata sulla scelta (), ad esempio o. USER_AUTH USER_SRP_AUTH CUSTOM_AUTH La risposta di errore indica che il nome utente o la password non sono corretti.

  • Amazon Cognito risponde alle richieste di autenticazione basata sulla scelta con una selezione casuale tra i tipi di sfida consentiti per il pool di utenti. Il tuo pool di utenti potrebbe restituire una passkey, una password monouso o una password di verifica.

  • La conferma dell'account Amazon Cognito e il recupero della password APIs restituiscono una risposta che indica che un codice è stato inviato a un supporto di consegna simulato, anziché una rappresentazione parziale delle informazioni di contatto di un utente.

Le seguenti informazioni descrivono in dettaglio i comportamenti delle operazioni del pool di utenti quando PreventUserExistenceErrors è impostato su. ENABLED

Operazioni di autenticazione e creazione degli utenti

È possibile configurare le risposte di errore in termini di nome utente-password e autenticazione Secure Remote Password (SRP). Puoi anche personalizzare gli errori restituiti con un'autenticazione personalizzata. L'autenticazione basata sulla scelta non è influenzata dalla configurazione. PreventUserExistenceErrors

Dettagli sulla divulgazione dell'esistenza degli utenti nei flussi di autenticazione
Autenticazione basata sulla scelta

Nel flusso di USER_AUTH autenticazione basato sulla scelta, Amazon Cognito pone una sfida rispetto ai principali fattori di autenticazione disponibili, a seconda della configurazione del pool di utenti e degli attributi degli utenti. Questo flusso di autenticazione può restituire problemi relativi a password, password remota sicura (SRP), WebAuthn (passkey), password monouso (OTP) per SMS o e-mail. Con PreventUserExistenceErrors active, Amazon Cognito sfida gli utenti inesistenti a completare una o più delle forme di autenticazione disponibili. Se è PreventUserExistenceErrors inattivo, Amazon Cognito restituisce UserNotFound un'eccezione.

Autenticazione con nome utente e password

I flussi ADMIN_USER_PASSWORD_AUTH di autenticazione e USER_PASSWORD_AUTH il PASSWORD flusso di USER_AUTH ritorno a NotAuthorizedException con il messaggio Incorrect username or password quando PreventUserExistenceErrors è attivo. Quando PreventUserExistenceErrors è inattivo, questi flussi ritornanoUserNotFoundException.

Autenticazione basata su password remota protetta (SRP)

Come procedura consigliata, implementa solo PreventUserExistenceErrors con USER_SRP_AUTH o con il PASSWORD_SRP flusso di pool di USER_AUTH utenti interni senza gli attributi di indirizzo e-mail, numero di telefono o alias del nome utente preferito. Gli utenti con attributi di alias potrebbero non essere soggetti alla soppressione dell'esistenza degli utenti nel flusso di autenticazione SRP. I flussi di autenticazione nome utente e password e la relativa USER_AUTH PASSWORD sfida eliminano ADMIN_USER_PASSWORD_AUTH completamente USER_PASSWORD_AUTH l'esistenza degli utenti dagli attributi degli alias.

Quando qualcuno tenta l'accesso SRP con un nome utente sconosciuto al client dell'app, Amazon Cognito restituisce una risposta simulata nel primo passaggio, come descritto nella RFC 5054. Amazon Cognito restituisce lo stesso codice e un ID utente interno in formato UUID per la stessa combinazione di nome utente e pool di utenti. Quando si invia una richiesta API RespondToAuthChallenge con verifica della password, Amazon Cognito restituisce un errore NotAuthorizedException generico quando il nome utente o la password non sono corretti. Per ulteriori informazioni sull'implementazione dell'autenticazione SRP, consulta. Accedi con password persistenti e payload sicuro

Sfida di autenticazione personalizzata Trigger Lambda

Amazon Cognito richiama la sfida di autenticazione personalizzata che Lambda attiva quando gli utenti tentano di accedere con il flusso di CUSTOM_AUTH autenticazione, ma il loro nome utente non viene trovato. L'evento di input include un parametro booleano denominato UserNotFound con un valore per ogni utente inesistente. true Questo parametro viene visualizzato negli eventi di richiesta che il pool di utenti invia alle funzioni Lambda di creazione, definizione e verifica dell'autenticazione che costituiscono l'architettura di autenticazione personalizzata. Quando esamini questo indicatore nella logica della tua funzione Lambda, puoi simulare sfide di autenticazione personalizzate per un utente che non esiste.

Trigger Lambda di pre-autenticazione

Amazon Cognito richiama il trigger di pre-autenticazione quando gli utenti tentano di accedere ma il loro nome utente non viene trovato. L'evento di input include un UserNotFound parametro il cui valore è true per ogni utente inesistente.

L'elenco seguente descrive l'effetto della creazione PreventUserExistenceErrors di account utente.

Dettagli sulla divulgazione dell'esistenza degli utenti nei flussi di creazione degli utenti
SignUp

L'SignUpoperazione ritorna sempre UsernameExistsException quando è già stato utilizzato un nome utente. Per evitare che Amazon Cognito restituisca un errore UsernameExistsException per indirizzi e-mail e numeri di telefono durante la registrazione di utenti nell'app, utilizza gli attributi alias basati sulla verifica. Per ulteriori informazioni sugli alias, consultare Personalizzazione degli attributi di accesso.

Per un esempio di come Amazon Cognito può impedire l'uso delle richieste API SignUp per scoprire gli utenti del pool di utenti in uso, consulta Prevenzione degli errori UsernameExistsException relativi a indirizzi e-mail e numeri di telefono durante la registrazione.

Utenti importati

Se PreventUserExistenceErrors è abilitato, durante l'autenticazione degli utenti importati viene restituito un errore NotAuthorizedException generico che indica che il nome utente o la password non erano corretti, anziché restituire PasswordResetRequiredException. Per ulteriori informazioni, consulta Necessità degli utenti importati di ripristinare le password.

Trigger Lambda di migrazione utenti

Amazon Cognito restituirà una risposta simulata per gli utenti inesistenti quando il trigger Lambda imposta una risposta vuota nel contesto dell'evento originale. Per ulteriori informazioni, consulta Importazione di utenti con un trigger Lambda per la migrazione di utenti.

Prevenzione degli errori UsernameExistsException relativi a indirizzi e-mail e numeri di telefono durante la registrazione

Nell'esempio seguente viene illustrato come impedire che indirizzi e-mail e numeri di telefono duplicati generino errori UsernameExistsException in risposta alle richieste API SignUp, durante la configurazione di attributi alias nel pool di utenti. È necessario aver creato il pool di utenti con indirizzo e-mail o numero di telefono come un attributo alias. Per ulteriori informazioni, consulta la sezione Personalizzazione degli attributi di accesso di Attributi del pool di utenti.

  1. Jie esegue la registrazione per un nuovo nome utente e fornisce anche l'indirizzo e-mail jie@example.com. Amazon Cognito invia un codice all'indirizzo e-mail.

    AWS CLI Comando di esempio

    aws cognito-idp sign-up --client-id 1234567890abcdef0 --username jie --password PASSWORD --user-attributes Name="email",Value="jie@example.com"

    Example response

    { "UserConfirmed": false, "UserSub": "<subId>", "CodeDeliveryDetails": { "AttributeName": "email", "Destination": "j****@e****", "DeliveryMedium": "EMAIL" } }
  2. Jie fornisce il codice inviato per confermare di essere il titolare dell'indirizzo email. Questo completa la registrazione come un utente.

    AWS CLI Comando di esempio

    aws cognito-idp confirm-sign-up --client-id 1234567890abcdef0 --username=jie --confirmation-code xxxxxx
  3. Shirley registra un nuovo account utente e fornisce l'indirizzo e-mail jie@example.com. Amazon Cognito non restituisce un errore UsernameExistsException e invia un codice di conferma all'indirizzo e-mail di Jie.

    AWS CLI Comando di esempio

    aws cognito-idp sign-up --client-id 1234567890abcdef0 --username shirley --password PASSWORD --user-attributes Name="email",Value="jie@example.com"

    Example response

    { "UserConfirmed": false, "UserSub": "<new subId>", "CodeDeliveryDetails": { "AttributeName": "email", "Destination": "j****@e****", "DeliveryMedium": "EMAIL" } }
  4. In uno scenario diverso, Shirley è la titolare di jie@example.com. Shirley recupera il codice inviato da Amazon Cognito all'indirizzo e-mail di Jie e tenta di confermare l'account.

    AWS CLI Comando di esempio

    aws cognito-idp confirm-sign-up --client-id 1234567890abcdef0 --username=shirley --confirmation-code xxxxxx

    Example response

    An error occurred (AliasExistsException) when calling the ConfirmSignUp operation: An account with the email already exists.

Amazon Cognito non restituisce un errore alla richiesta aws cognito-idp sign-up di Shirley, nonostante jie@example.com sia stato assegnato a un utente esistente. Shirley deve dimostrare di essere titolare dell'indirizzo e-mail prima che Amazon Cognito restituisca una risposta di errore. In un pool di utenti con attributi alias, questo comportamento impedisce l'uso dell'API SignUp pubblica per verificare se esiste un utente con un determinato indirizzo e-mail o numero di telefono.

Questo comportamento è diverso dalla risposta restituita da Amazon Cognito alla richiesta SignUp con un nome utente esistente, come illustrato nell'esempio seguente. Sebbene Shirley apprenda da questa risposta che esiste già un utente con il nome utente jie, non viene informata di alcun indirizzo e-mail o numero di telefono associato all'utente.

Comando della CLI di esempio

aws cognito-idp sign-up --client-id 1example23456789 --username jie --password PASSWORD --user-attributes Name="email",Value="shirley@example.com"

Example response

An error occurred (UsernameExistsException) when calling the SignUp operation: User already exists

Operazioni di ripristino della password

Amazon Cognito restituisce le seguenti risposte alle operazioni di reimpostazione della password utente quando si evitano errori relativi all’esistenza dell'utente.

ForgotPassword

Quando un utente non viene trovato, è disattivato o non dispone di un meccanismo di consegna verificato per recuperare la password. Amazon Cognito gestisce gli utenti esistenti e quelli inesistenti in modo diverso.

  • Utenti esistenti: per gli utenti esistenti che non dispongono di un indirizzo email/telefono verificato per il recupero dell'account, Amazon Cognito restituisce un. InvalidParameterException

  • Utenti inesistenti: per gli utenti inesistenti che non dispongono di un indirizzo e-mail/telefono verificato per il recupero dell'account, Amazon Cognito restituisce sia un supporto di consegna simulato che un mezzo di spedizione. InvalidParameterException CodeDeliveryDetails Il supporto di recapito simulato è determinato dal formato del nome utente di input e dalle impostazioni di verifica del pool di utenti.

ConfirmForgotPassword

Amazon Cognito restituisce l'errore CodeMismatchException per gli utenti che non esistono o sono disabilitati. Se non viene richiesto un codice quando si utilizza ForgotPassword, Amazon Cognito restituisce l'errore ExpiredCodeException.

Operazioni di conferma

Amazon Cognito restituisce le seguenti risposte alle operazioni di conferma e verifica quando si evitano errori relativi all’esistenza dell'utente.

ResendConfirmationCode

Amazon Cognito restituisce l'errore CodeDeliveryDetails per un utente disabilitato o uno che non esiste. Per un utente esistente, Amazon Cognito invia un codice di conferma all'indirizzo e-mail o al telefono dell'utente.

ConfirmSignUp

ExpiredCodeException restituisce se un codice è scaduto. Amazon Cognito restituisce NotAuthorizedException quando un utente non è autorizzato. Se il codice non corrisponde a quello previsto dal server, Amazon Cognito restituisce CodeMismatchException.