View a markdown version of this page

Modelli di autorizzazione per l'autenticazione tramite API e SDK - 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à.

Modelli di autorizzazione per l'autenticazione tramite API e SDK

Quando inizi lo sviluppo della tua applicazione con l'autenticazione dei pool di utenti, devi decidere il modello di autorizzazione API più adatto al tuo tipo di applicazione. Un modello di autorizzazione è un sistema per fornire l'autorizzazione a effettuare richieste con i componenti di autenticazione nelle integrazioni API e SDK dei pool di utenti di Amazon Cognito. Amazon Cognito ha tre modelli di autorizzazione: pubblico e autorizzato con IAM-authorized token.

Nel caso IAM-authorized delle richieste, l'autorizzazione proviene da una firma effettuata da un set di credenziali AWS IAM nell'Authorizationintestazione di una richiesta. Per le applicazioni lato server, questa pratica protegge le operazioni di autenticazione con l'autorizzazione IAM. Con le richieste di autenticazione pubbliche (non autenticate), non è richiesta alcuna autorizzazione. Questo è adatto per le applicazioni lato client distribuite agli utenti. Nelle operazioni autorizzate tramite token, in genere implementate in combinazione con operazioni pubbliche, l'autorizzazione proviene da un token di sessione o da un token di accesso incluso nell'Authorizationintestazione della richiesta. L'autenticazione di Amazon Cognito richiede in genere l'implementazione di due o più operazioni API in ordine e le operazioni API utilizzate dipendono dalle caratteristiche dell'applicazione. I client pubblici, in cui l'applicazione è distribuita agli utenti, utilizzano operazioni pubbliche, in cui le richieste di accesso non richiedono autorizzazione. Token-authorized le operazioni continuano la sessione degli utenti nelle applicazioni pubbliche. Server-side i client, in cui la logica dell'applicazione è ospitata su un sistema remoto, proteggono le operazioni di autenticazione con l'autorizzazione IAM per le richieste di accesso. Le coppie di operazioni API che seguono e i corrispondenti metodi SDK sono mappati ai modelli di autorizzazione disponibili.

Ogni operazione di autenticazione pubblica ha una qualche forma di equivalente sul lato server, ad esempio e. UpdateUserAttributes AdminUpdateUserAttributes Mentre le operazioni sul lato client sono avviate dall'utente e richiedono una conferma, le operazioni sul lato server presuppongono che la modifica sia stata confermata da un amministratore del pool di utenti e le modifiche hanno effetto immediato. In questo esempio, Amazon Cognito invia un messaggio con un codice di conferma all'utente e il token di accesso dell'utente autorizza una richiesta che invia il codice. VerifyUserAttribute L'applicazione lato server può impostare immediatamente il valore di qualsiasi attributo, anche se sono necessarie considerazioni speciali per la modifica del valore degli indirizzi email e dei numeri di telefono quando vengono utilizzati per l'accesso.

Per confrontare l'autenticazione API e visualizzare un elenco completo delle operazioni API e dei relativi modelli di autorizzazione, consulta. Informazioni sull'API, sull'OIDC e sull'autenticazione delle pagine di accesso gestite

Client-side (public) authentication

Di seguito è riportata una tipica sequenza di richieste in un'applicazione lato client

  1. L'InitiateAuthoperazione pubblica invia credenziali primarie come nome utente e password.

  2. L'RespondToAuthChallengeoperazione autorizzata tramite token invia un token di sessione derivante dalla InitiateAuth risposta e la risposta a una sfida, ad esempio MFA. L'autorizzazione tramite token di sessione indica le richieste che fanno parte di cicli di autenticazione non ancora completi.

  3. L'ConfirmDeviceoperazione autorizzata tramite token invia un token di accesso ed esegue l'operazione di scrittura per aggiungere un dispositivo memorizzato al profilo dell'utente. L'autorizzazione tramite token di accesso indica le richieste destinate alle operazioni self-service dell'utente dopo il completamento dell'autenticazione.

Per ulteriori informazioni, consulta Client-side opzioni di autenticazione e Informazioni sull'API, sull'OIDC e sull'autenticazione delle pagine di accesso gestite.

Server-side authentication

Di seguito è riportata una sequenza tipica di richieste provenienti da un'operazione lato server. Ogni richiesta ha un'intestazione di autorizzazione AWS Signature Version 4 firmata con le credenziali del computer IAM che sono state rilasciate al server delle applicazioni.

  1. L'AdminInitiateAuthoperazione invia credenziali primarie come nome utente e password.

  2. AdminRespondToAuthChallengel'operazione invia la risposta a una sfida, ad esempio MFA.

  3. L'AdminUpdateDeviceStatusoperazione imposta la chiave del dispositivo in base alla AdminInitiateAuth risposta memorizzata.

Per ulteriori informazioni, consulta Server-side opzioni di autenticazione e Informazioni sull'API, sull'OIDC e sull'autenticazione delle pagine di accesso gestite.

L'autenticazione di un utente viene effettuata rispondendo a richieste successive fino a che l'autenticazione non riesce o Amazon Cognito emette token per l'utente. Puoi ripetere questi passaggi con Amazon Cognito, in un processo che include richieste di autenticazione di tipo diverso, per supportare qualsiasi flusso di autenticazione personalizzato.

Server-side opzioni di autenticazione

Le applicazioni Web e altre applicazioni lato server implementano l'autenticazione su un server remoto che un client carica in un'applicazione di visualizzazione remota come un browser o una sessione SSH. Server-side le applicazioni hanno in genere le seguenti caratteristiche.

  • Sono integrati in un'applicazione installata su un server in linguaggi come Java, Ruby o Node.js.

  • Si connettono ai client delle app del pool di utenti che potrebbero avere un client segreto, chiamato client riservati.

  • Hanno accesso alle AWS credenziali.

  • Richiamano l'accesso gestito per l'autenticazione o utilizzano IAM-authorized le operazioni nell'API dei pool di utenti con un AWS SDK.

  • Servono clienti interni e potrebbero servire clienti pubblici.

Server-side le operazioni con l'API dei pool di utenti possono utilizzare password, password monouso o passkey come fattore di accesso principale. Per le app lato server, l'autenticazione dei bacini d'utenza è analoga a quella per le app lato client, con le seguenti eccezioni:

  • L'app lato server effettua una richiesta API. AdminInitiateAuth Questa operazione richiede AWS credenziali con autorizzazioni che includono e. cognito-idp:AdminInitiateAuth cognito-idp:AdminRespondToAuthChallenge L'operazione restituisce la richiesta di verifica o il risultato dell'autenticazione.

  • Quando l'applicazione riceve una richiesta, effettua una richiesta AdminRespondToAuthChallenge API. L'operazione AdminRespondToAuthChallenge API richiede anche AWS credenziali.

Per ulteriori informazioni sulla firma delle richieste API Amazon Cognito con AWS credenziali, consulta la procedura di firma della versione 4 di Signature nella AWS Guida generale.

Nella risposta di AdminInitiateAuth ChallengeParameters, l'attributo USER_ID_FOR_SRP, se presente, contiene il nome utente reale dell'utente e non un alias (come l'indirizzo e-mail o il numero di telefono). Nella chiamata a AdminRespondToAuthChallenge, in ChallengeResponses, è necessario passare questo nome utente nel parametro USERNAME.

Nota

Poiché le implementazioni di amministrazione backend utilizzano il flusso di autenticazione degli amministratori, il flusso non supporta i dispositivi memorizzati. Quando abiliti il tracciamento dei dispositivi, l'autenticazione di amministrazione avviene correttamente, ma le chiamate per aggiornare i token di accesso non andranno a buon fine.

Client-side opzioni di autenticazione

Le app mobili e altri tipi di applicazioni lato client vengono installate sui dispositivi degli utenti ed eseguono la logica di autenticazione e l'interfaccia utente localmente. In genere hanno le seguenti caratteristiche.

  • Sono costruiti in linguaggi come React native, Flutter e Swift e vengono distribuiti sui dispositivi degli utenti.

  • Si connettono a client di app di pool di utenti che non dispongono di un client segreto, chiamati client pubblici.

  • Non hanno accesso alle AWS credenziali che autorizzerebbero le richieste IAM-authorized API.

  • Richiamano l'accesso gestito per l'autenticazione o utilizzano operazioni pubbliche e autorizzate tramite token nell'API dei pool di utenti con un SDK. AWS

  • Servono clienti pubblici e consentono a chiunque di registrarsi e accedere.

Client-side le operazioni con l'API dei pool di utenti possono utilizzare password, password monouso o passkey come fattore di accesso principale. Il seguente processo funziona per le app lato client dell'utente create con AWS Amplify o SDK AWS.

  1. L'utente inserisce il nome utente e la password nell'app.

  2. L'app chiama l'operazione InitiateAuth con il nome utente e i dettagli SRP (Secure Remote Password) dell'utente.

    Questa operazione API restituisce i parametri di autenticazione.

    Nota

    L'app genera i dettagli SRP con le funzionalità SRP di Amazon Cognito integrate negli SDK AWS .

  3. L'app chiama l'operazione RespondToAuthChallenge. Se la chiamata va a buon fine, Amazon Cognito restituisce i token dell'utente e il flusso di autenticazione è completo.

    Se Amazon Cognito richiede un ulteriore fattore di autenticazione, la chiamata a RespondToAuthChallenge non restituisce token. Invece, la chiamata restituisce una sessione.

  4. Se RespondToAuthChallenge restituisce una sessione, l'app chiama di nuovo RespondToAuthChallenge, questa volta con la sessione e la risposta alla richiesta di identificazione (ad esempio, il codice MFA).

Informazioni sull'API, sull'OIDC e sull'autenticazione delle pagine di accesso gestite

I pool di utenti di Amazon Cognito sono una combinazione di diverse tecnologie di autenticazione. Si affidano a fornitori di identità esterni ()IdPs. Si tratta IdPs di applicazioni che implementano l'autenticazione con gli SDK OpenID Connect (OIDC). Forniscono l'autenticazione come emittenti di token web JSON (JWT) in modo simile all'autenticazione OIDC, ma con metodi API che fanno parte degli SDK. AWS Possono anche essere punti di accesso sicuri alle tue applicazioni.

Quando desideri eseguire la registrazione, l'accesso e la gestione di utenti nel pool di utenti, puoi utilizzare due opzioni.

  1. Le tue pagine di accesso gestite e la classica interfaccia utente ospitata includono gli endpoint interattivi per l'accesso gestito e gli endpoint federativi che gestiscono i ruoli IdP e relying-party. Costituiscono un pacchetto di pagine web pubbliche che vengono attivate da Amazon Cognito quando scegli un dominio per il pool di utenti. Per iniziare rapidamente con le funzionalità di autenticazione e autorizzazione dei pool di utenti di Amazon Cognito, comprese le pagine per la registrazione, l'accesso, la gestione delle password e l'autenticazione a più fattori (MFA), utilizza l'interfaccia utente integrata dell'accesso gestito.

    Gli altri endpoint del pool di utenti facilitano l'autenticazione con provider di identità di terze parti (). IdPs I servizi che vengono eseguiti includono quanto segue.

    1. Service-provider endpoint di callback per le richieste autenticate provenienti da, ad esempio, e. IdPs saml2/idpresponse oauth2/idpresponse Quando Amazon Cognito è un provider di servizi (SP) intermedio tra l'app e l'IdP, gli endpoint di callback rappresentano il servizio.

    2. Endpoint che forniscono informazioni sull'ambiente, ad esempio oauth2/userInfo/.well-known/jwks.json. La tua app utilizza questi endpoint quando verifica i token o recupera i dati del profilo utente con le librerie per sviluppatori OIDC o OAuth 2.0.

  2. L'API dei pool di utenti di Amazon Cognito è un set di strumenti per la tua app web o mobile per autenticare gli utenti dopo aver raccolto le informazioni di accesso nel tuo front-end personalizzato. L'autenticazione API dei pool di utenti produce i seguenti token web JSON.

    1. Un token di identità con richieste di attributi verificabili da parte dell'utente.

    2. Un token di accesso che autorizza l'utente a creare richieste API autorizzate da token a un endpoint di servizio AWS.

      Nota

      Per impostazione predefinita, i token di accesso dell'autenticazione API dei pool di utenti contengono solo l'ambito aws.cognito.signin.user.admin. Se desideri generare un token di accesso con altri ambiti, ad esempio per autorizzare una richiesta a un'API di terze parti, richiedi gli ambiti durante l'autenticazione tramite gli endpoint del pool di utenti o aggiungi ambiti personalizzati in un Trigger Lambda di pre-generazione del token. La personalizzazione dei token di accesso comporta costi aggiuntivi per la fattura. AWS

    3. Un token di aggiornamento che autorizza le richieste di nuovi ID e token di accesso e aggiorna l'identità dell'utente e le proprietà di controllo degli accessi.

Puoi collegare un utente federato, che normalmente accede tramite gli endpoint dei pool di utenti, con un utente il cui profilo è locale al pool di utenti. Un utente locale esiste esclusivamente nella directory del pool di utenti senza federazione tramite un IdP esterno. Se colleghi la loro identità federata a un utente locale in una richiesta AdminLinkProviderForUser API, possono accedere con l'API dei pool di utenti. Per ulteriori informazioni, consulta Collegamento di utenti federati a un profilo utente esistente.

L'API dei pool di utenti di Amazon Cognito ha un doppio scopo.

  1. Consente di creare e configurare le risorse dei pool di utenti di Amazon Cognito. Ad esempio, puoi creare pool di utenti, aggiungere AWS Lambda trigger e configurare il dominio del pool di utenti che ospita le tue pagine di accesso gestite.

  2. Esegue le operazioni di registrazione, accesso e altre operazioni utente per utenti locali e collegati.

Scenario di esempio con l'API dei pool di utenti di Amazon Cognito
  1. L'utente seleziona il pulsante "Crea un account" creato nell'app. Inserisce un indirizzo e-mail e una password.

  2. La tua app invia una richiesta SignUp API e crea un nuovo utente nel tuo pool di utenti.

  3. L'app richiede all'utente un codice di conferma e-mail. Gli utenti inseriscono il codice ricevuto in un messaggio di posta elettronica.

  4. La tua app invia una richiesta ConfirmSignUp API con il codice di conferma dell'utente.

  5. L'app richiede all'utente il nome utente e password. Le relative informazioni vengono inserite.

  6. La tua app invia una richiesta InitiateAuth API e memorizza un token ID, un token di accesso e un token di aggiornamento. L'app chiama le librerie OIDC per gestire i token di un utente e mantenere persistente la sessione dell'utente.

Nell'API dei pool di utenti di Amazon Cognito, non è possibile consentire l'accesso agli utenti che eseguono la federazione tramite un IdP. Questi utenti devono essere autenticati tramite gli endpoint del pool di utenti. Per ulteriori informazioni sugli endpoint del pool di utenti che includono l'accesso gestito, consulta. Endpoint del pool di utenti e riferimento per l'accesso gestito

I tuoi utenti federati possono iniziare con l'accesso gestito e selezionare il proprio IdP, oppure puoi saltare l'accesso gestito e inviare gli utenti direttamente al tuo IdP per l'accesso. Quando la richiesta API a Endpoint Authorize include un parametro IdP, Amazon Cognito reindirizza automaticamente l'utente alla pagina di accesso IdP.

Scenario di esempio con pagine di accesso gestite
  1. L'utente seleziona il pulsante "Crea un account" creato nell'app.

  2. L'accesso gestito presenta all'utente un elenco dei provider di identità social in cui sono state registrate le credenziali di sviluppatore. L'utente sceglie Apple.

  3. L'app avvia una richiesta a Endpoint Authorize con il nome di provider SignInWithApple.

  4. Il browser dell'utente apre la pagina di autenticazione Apple. L'utente accede e sceglie di autorizzare Amazon Cognito a leggere le informazioni del proprio profilo.

  5. Amazon Cognito conferma il token di accesso Apple ed esegue una query sul profilo Apple dell'utente.

  6. L'utente presenta un codice di autorizzazione Amazon Cognito all'app.

  7. La libreria OIDC dell'applicazione scambia il codice di autorizzazione con Endpoint Token e memorizza un token ID, un token di accesso e un token di aggiornamento emessi dal pool di utenti. La tua app utilizza le librerie OIDC per gestire i token dell'utente e mantenere una sessione persistente per quell'utente.

L'API dei pool di utenti e le pagine di accesso gestite supportano una varietà di scenari, descritti in questa guida. Nelle sezioni seguenti viene illustrato in che modo l'API dei pool di utenti si divide ulteriormente in classi che supportano i requisiti di registrazione, accesso e gestione delle risorse.

Elenco delle operazioni API raggruppate per modello di autorizzazione

L'API dei pool di utenti di Amazon Cognito, un'interfaccia di gestione delle risorse e un'interfaccia di autenticazione e autorizzazione lato utente, combina i modelli di autorizzazione che seguono le relative operazioni. A seconda dell'operazione API, potrebbe essere necessario fornire l'autorizzazione con credenziali IAM, un token di accesso, un token di sessione, un segreto del client o una combinazione di questi. Per molte operazioni di autenticazione e autorizzazione utente, è possibile scegliere tra versioni autenticate e non autenticate della richiesta. Le operazioni non autenticate sono best practice di sicurezza per le app distribuite agli utenti, come app per dispositivi mobili; non è necessario includere alcun segreto nel codice.

È possibile assegnare autorizzazioni solo nelle policy IAM per IAM-authorized operazioni di gestione e IAM-authorized operazioni con gli utenti.

IAM-authorized le operazioni di gestione modificano e visualizzano il pool di utenti e la configurazione del client dell'app, come faresti in Console di gestione AWS.

Ad esempio, per modificare il pool di utenti in una richiesta UpdateUserPool API, devi presentare AWS credenziali e autorizzazioni IAM per aggiornare la risorsa.

Per autorizzare queste richieste in AWS Command Line Interface (AWS CLI) o in un AWS SDK, configura il tuo ambiente con variabili di ambiente o una configurazione del client che aggiunga le credenziali IAM alla tua richiesta. Per ulteriori informazioni, consulta Accesso AWS tramite le tue AWS credenziali in. Riferimenti generali di AWS Puoi anche inviare richieste direttamente agli endpoint del servizio per l'API dei pool di utenti Amazon Cognito. È necessario autorizzare o firmare queste richieste con le AWS credenziali che si incorporano nell'intestazione della richiesta. Per ulteriori informazioni, consulta Signing API requests. AWS

IAM-authorized operazioni utente: registrazione, accesso, gestione delle credenziali, modifica e visualizzazione degli utenti.

Ad esempio, un livello applicazione lato server potrebbe eseguire il backup di un front-end Web. L'app lato server è un client riservato OAuth considerato affidabile con accesso privilegiato alle risorse Amazon Cognito. Per registrare un utente nell'app, il server può includere AWS le credenziali in una richiesta AdminCreateUser API. Per ulteriori informazioni sui tipi di client OAuth, consulta la sezione relativa ai tipi di client in The OAuth 2.0 Authorization Framework.

Per autorizzare queste richieste in un SDK AWS CLI o in un AWS SDK, configura l'ambiente dell'app sul lato server con variabili di ambiente o una configurazione client che aggiunga le credenziali IAM alla tua richiesta. Per ulteriori informazioni, consulta Accesso AWS tramite le tue credenziali in. AWS Riferimenti generali di AWS Puoi anche inviare richieste direttamente agli endpoint del servizio per l'API dei pool di utenti Amazon Cognito. È necessario autorizzare o firmare queste richieste con le AWS credenziali che si incorporano nell'intestazione della richiesta. Per ulteriori informazioni, consulta Signing API requests. AWS

Se il client dell'app dispone di un segreto del client, devi fornire le tue credenziali IAM e, a seconda dell'operazione, il parametro SecretHash o il valore SECRET_HASH in AuthParameters. Per ulteriori informazioni, consulta Calcolo dei valori SecretHash.

Operazioni utente non autenticate: registrazione, accesso e avvio del ripristino delle password per gli utenti. Utilizza operazioni API non autenticate, o pubbliche, per consentire a chiunque su Internet di eseguire la registrazione e l'accesso all'app.

Ad esempio, per registrare un utente nell'app, puoi distribuire un client pubblico OAuth che non fornisce alcun accesso privilegiato ai segreti. Puoi registrare questo utente con l'operazione API non autenticata. SignUp

Per inviare queste richieste in un client pubblico sviluppato con un AWS SDK, non è necessario configurare alcuna credenziale. Puoi anche inviare richieste direttamente agli endpoint del servizio per l'API dei pool di utenti Amazon Cognito senza autorizzazione aggiuntiva.

Se il client dell'app dispone di un segreto del client, devi fornire, a seconda dell'operazione, il parametro SecretHash o il valore SECRET_HASH in AuthParameters. Per ulteriori informazioni, consulta Calcolo dei valori SecretHash.

Token-authorized operazioni con gli utenti: disconnettersi, gestire le credenziali, modificare e visualizzare gli utenti dopo che hanno effettuato l'accesso o avviato il processo di accesso. Utilizza le operazioni API autorizzate tramite token quando non desideri distribuire segreti nella tua app e desideri autorizzare le richieste con le credenziali dell'utente. Se l'utente ha completato l'accesso, devi autorizzare la richiesta API autorizzata tramite token con un token di accesso. Se l'utente sta eseguendo un processo di accesso, devi autorizzare la relativa richiesta API autorizzata tramite token con un token di sessione restituito da Amazon Cognito nella risposta alla richiesta precedente.

Ad esempio, in un client pubblico, potrebbe essere necessario aggiornare il profilo di un utente in modo da limitare l'accesso in scrittura solo al profilo dell'utente. Per effettuare questo aggiornamento, il cliente può includere il token di accesso dell'utente in una richiesta UpdateUserAttributes API.

Per inviare queste richieste in un client pubblico sviluppato con un AWS SDK, non è necessario configurare alcuna credenziale. Includi un parametro AccessToken o Session nella richiesta. Puoi anche inviare richieste direttamente agli endpoint del servizio per l'API dei pool di utenti Amazon Cognito. Per autorizzare una richiesta a un endpoint del servizio, includi il token di accesso o sessione nel corpo POST della richiesta.

Per firmare una richiesta API per un'operazione autorizzata tramite token, includi il token di accesso come un'intestazione Authorization nella richiesta, nel formato Bearer <Base64-encoded access token>.

¹ RevokeToken e GetTokensFromRefreshToken accetta i token di aggiornamento come parametro di autorizzazione. Il token di aggiornamento funge da token di autorizzazione e come risorsa di destinazione.