Flusso di autenticazione dei pool di identità - 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à.

Flusso di autenticazione dei pool di identità

Amazon Cognito consente di creare identificatori univoci per i tuoi utenti finali che sono mantenuti coerenti su tutti i dispositivi e le piattaforme. Amazon Cognito fornisce anche credenziali temporanee con privilegi limitati alla tua applicazione per accedere alle risorse. AWS In questa pagina sono riportati i concetti di base del funzionamento dell'autenticazione in Amazon Cognito e viene spiegato il ciclo di vita di un'identità all'interno del tuo pool di identità.

Flusso di autenticazione del provider esterno

Un utente che effettua l'autenticazione con Amazon Cognito passa attraverso un processo multifase per eseguire il bootstrap delle proprie credenziali. Amazon Cognito dispone di due flussi differenti per l'autenticazione con provider pubblici: avanzati e di base.

Una volta completato uno di questi flussi, puoi accedere ad altri, Servizi AWS come definito dalle politiche di accesso del tuo ruolo. Di default, la console Amazon Cognito crea ruoli con accesso all'archivio di Amazon Cognito Sync e ad Amazon Mobile Analytics. Per ulteriori informazioni su come concedere un accesso aggiuntivo, consulta IAMruoli.

I pool di identità accettano i seguenti elementi forniti dai provider:

Provider Artefatto di autenticazione
Bacino d'utenza di Amazon Cognito Token ID
OpenID Connect () OIDC Token ID
SAML2.0 SAMLasserzione
Fornitore sociale Token di accesso

Flusso di autenticazione avanzato (semplificato)

Quando utilizzi il flusso di autenticazione avanzato, l'app presenta innanzitutto una prova di autenticazione da un pool di utenti Amazon Cognito autorizzato o da un provider di identità di terze parti in GetIduna richiesta.

  1. L'applicazione presenta una prova di autenticazione, un token JSON Web o un'SAMLasserzione, da un pool di utenti Amazon Cognito autorizzato o da un provider di identità di terze parti in una richiesta GetID.

  2. Il tuo pool di identità restituisce un ID di identità.

  3. L'applicazione combina l'ID di identità con la stessa prova di autenticazione in una GetCredentialsForIdentityrichiesta.

  4. Il pool di identità restituisce AWS le credenziali.

  5. L'applicazione firma AWS API le richieste con le credenziali temporanee.

L'autenticazione avanzata gestisce la logica di selezione dei IAM ruoli e il recupero delle credenziali nella configurazione del pool di identità. È possibile configurare il pool di identità per selezionare un ruolo predefinito e applicare i principi del controllo degli accessi basato sugli attributi (ABAC) o del controllo degli accessi basato sui ruoli () alla selezione dei ruoli. RBAC Le AWS credenziali dell'autenticazione avanzata sono valide per un'ora.

Ordine delle operazioni nell'autenticazione avanzata
  1. GetId

  2. GetCredentialsForIdentity

Un diagramma che mostra il flusso dell'autenticazione avanzata

Flusso di autenticazione di base (classico)

Quando si utilizza il flusso di autenticazione di base,

  1. L'applicazione presenta una prova di autenticazione, un token JSON Web o un'SAMLasserzione, da un pool di utenti Amazon Cognito autorizzato o da un provider di identità di terze parti in una richiesta GetID.

  2. Il tuo pool di identità restituisce un ID di identità.

  3. L'applicazione combina l'ID di identità con la stessa prova di autenticazione in una GetOpenIdTokenrichiesta.

  4. GetOpenIdTokenrestituisce un nuovo token OAuth 2.0 emesso dal tuo pool di identità.

  5. L'applicazione presenta il nuovo token in una AssumeRoleWithWebIdentityrichiesta.

  6. AWS Security Token Service AWS STS) restituisce AWS le credenziali.

  7. L'applicazione firma AWS API le richieste con le credenziali temporanee.

Il flusso di lavoro di base offre un controllo più granulare sulle credenziali distribuite agli utenti. La richiesta GetCredentialsForIdentity del flusso di autenticazione avanzato richiede un ruolo basato sul contenuto di un token di accesso. La AssumeRoleWithWebIdentity richiesta nel flusso di lavoro classico garantisce all'app una maggiore capacità di richiedere le credenziali per qualsiasi AWS Identity and Access Management ruolo configurato con una politica di fiducia sufficiente. Puoi anche richiedere una durata della sessione del ruolo personalizzata.

Puoi accedere con il flusso di autenticazione di base nei pool di utenti che non dispongono di mappature dei ruoli. Questo tipo di pool di identità non ha un ruolo predefinito autenticato o non autenticato e non è configurato il controllo degli accessi basato su ruoli o attributi. Quando si tenta di accedere GetOpenIdToken a un pool di identità con mappature dei ruoli, viene visualizzato il seguente errore.

Basic (classic) flow is not supported with RoleMappings, please use enhanced flow.
Ordine delle operazioni nell'autenticazione di base
  1. GetId

  2. GetOpenIdToken

  3. AssumeRoleWithWebIdentity

Un diagramma che mostra il flusso dell'autenticazione di base

Flusso di autenticazione delle identità autenticate dagli sviluppatori

Quando utilizzi Identità autenticate dagli sviluppatori, il client usa un altro flusso di autenticazione che include il codice esterno ad Amazon Cognito per convalidare l'utente nel tuo sistema di autenticazione. Il codice al di fuori di Amazon Cognito è indicato come tale.

Flusso di autenticazione avanzato

Ordine delle operazioni nell'autenticazione avanzata con un provider di sviluppo
  1. Accesso tramite provider per gli sviluppatori (codice esterno Amazon Cognito)

  2. Convalida dell'accesso dell'utente (codice esterno ad Amazon Cognito)

  3. GetOpenIdTokenForDeveloperIdentity

  4. GetCredentialsForIdentity

Un diagramma che mostra il flusso dell'autenticazione avanzata autenticata dallo sviluppatore
Ordine delle operazioni nell'autenticazione di base con un provider di sviluppo
  1. Implementa la logica all'esterno del pool di identità per accedere e generare un identificatore sviluppatore-provider.

  2. Recupera le credenziali memorizzate sul lato server. AWS

  3. Invia l'identificatore del provider di sviluppo in una GetOpenIdTokenForDeveloperIdentityAPIrichiesta firmata con credenziali autorizzate. AWS

  4. Richiedi le credenziali dell'applicazione con. AssumeRoleWithWebIdentity

Un diagramma che mostra il flusso dell'autenticazione di base autenticata dagli sviluppatori

Quale flusso di autenticazione usare?

Il flusso avanzato è la scelta più sicura con il più basso livello di impegno da parte degli sviluppatori:

  • Il flusso migliorato riduce la complessità, le dimensioni e la frequenza delle API richieste.

  • Non è necessario che l'applicazione effettui ulteriori API richieste a AWS STS.

  • Il pool di identità valuta gli utenti in base alle credenziali di IAM ruolo che devono ricevere. Non è necessario incorporare la logica per la selezione dei ruoli nel client.

Importante

Quando crei un nuovo pool di identità, non attivare l'autenticazione di base (classica) per impostazione predefinita, come best practice. Per implementare l'autenticazione di base, valuta innanzitutto le relazioni di fiducia dei tuoi IAM ruoli per le identità web. Quindi inserite la logica per la selezione dei ruoli nel vostro client e proteggete il client dalle modifiche da parte degli utenti.

Il flusso di autenticazione di base delega la logica di selezione dei IAM ruoli all'applicazione. In questo flusso, Amazon Cognito convalida la sessione autenticata o non autenticata dell'utente ed emette un token con cui puoi scambiare credenziali. AWS STS Gli utenti possono scambiare i token dell'autenticazione di base con qualsiasi IAM ruolo che si fida del tuo pool di identità e/o dello stato autenticato/non autenticato. amr

Allo stesso modo, tenete presente che l'autenticazione degli sviluppatori è una scorciatoia per la convalida dell'autenticazione del provider di identità. Amazon Cognito considera attendibili le AWS credenziali che autorizzano una GetOpenIdTokenForDeveloperIdentityrichiesta senza un'ulteriore convalida del contenuto della richiesta. Proteggi i segreti che autorizzano l'autenticazione degli sviluppatori dall'accesso da parte degli utenti.

APIriepilogo

GetId

La GetIdAPIchiamata è la prima chiamata necessaria per stabilire una nuova identità in Amazon Cognito.

Accesso non autenticato

Amazon Cognito può concedere le autorizzazione di accesso alle tue applicazioni agli utenti guest non autenticati. Se questa funzionalità è abilitata nel tuo pool di identità, gli utenti possono richiedere un nuovo ID di identità in qualsiasi momento tramite. GetId API È previsto che l'applicazione memorizzi nella cache questo ID identità per effettuare chiamate successive a Amazon Cognito. The AWS Mobile SDKs e AWS SDK for JavaScript in the Browser dispongono di fornitori di credenziali che gestiscono questa memorizzazione nella cache per te.

Accesso autenticato

Dopo aver configurato l'applicazione con il supporto per un provider di accesso pubblico (Facebook, Google+, Login with Amazon o Sign in with Apple), gli utenti possono anche fornire token (o OAuth OpenID Connect) che li identificano in tali provider. Se utilizzato in una chiamata a GetId, Amazon Cognito crea una nuova identità autenticata oppure restituisce l'identità già associata con quel particolare accesso. Amazon Cognito fa ciò convalidando il token con il provider e assicurando che:

  • Il token sia valido e che provenga dal provider configurato.

  • Il token non sia scaduto.

  • Il token corrisponda con l'identificatore dell'applicazione creato con quel provider (ad esempio,l'ID dell'app Facebook).

  • Il token corrisponda con l'identificatore dell'utente.

GetCredentialsForIdentity

GetCredentialsForIdentityAPIPossono essere chiamati dopo aver stabilito un ID di identità. Questa operazione è quindi AssumeRoleWithWebIdentityfunzionalmente equivalente alla chiamata GetOpenIdToken.

Affinché Amazon Cognito possa chiamare per tuo AssumeRoleWithWebIdentity conto, al tuo pool di identità devono essere associati IAM dei ruoli. Puoi farlo tramite la console Amazon Cognito o manualmente tramite l'SetIdentityPoolRolesoperazione.

GetOpenIdToken

Effettua una GetOpenIdTokenAPIrichiesta dopo aver stabilito un ID di identità. Memorizza l'identità nella cache IDs dopo la prima richiesta e avvia le successive sessioni di base (classiche) per quell'identità conGetOpenIdToken.

La risposta a una GetOpenIdToken API richiesta è un token generato da Amazon Cognito. Puoi inviare questo token come WebIdentityToken parametro in una AssumeRoleWithWebIdentityrichiesta.

Prima di inviare il token OpenID, è necessario verificarlo nell'app. Puoi usare OIDC le librerie della tua libreria SDK o di una libreria simile aws-jwt-verifyper confermare che Amazon Cognito ha emesso il token. L'ID della chiave di firma, okid, del token OpenID è uno di quelli elencati in Amazon Cognito Identity jwks_uri documento †. Queste chiavi sono soggette a modifiche. La funzione che verifica i token di identità di Amazon Cognito deve aggiornare periodicamente l'elenco delle chiavi dal documento jwks_uri. Amazon Cognito imposta la durata dell'aggiornamento nell'intestazione della risposta cache-control di jwks_uri, attualmente con max-age impostato su 30 giorni.

Accesso non autenticato

Per ottenere un token per un'identità non autenticata, necessiti soltanto dell'ID identità. Non è possibile ottenere un token non autenticato per identità autenticate o disattivate.

Accesso autenticato

Se disponi di un'identità autenticata, è necessario trasmettere almeno un token valido per un accesso già associato con quella identità. Tutti i token trasmessi durante la chiamata GetOpenIdToken dovranno trasmettere la stessa convalida menzionata in precedenza; se uno dei token fallisce, tutta la chiamata ha esito negativo. La risposta dalla chiamata GetOpenIdToken include anche l'ID identità. Questo avviene perché l'ID identità che trasmetti potrebbe non essere quello che viene restituito.

Collegamento degli accessi

Se invii un token per un accesso che non è già associato a un'identità, l'accesso è considerato "collegato" all'identità associata. Puoi collegare un solo accesso per provider pubblico. I tentavi di collegare più di un accesso con un provider pubblico determinano una risposta di errore ResourceConflictException. Se un accesso è semplicemente collegato a un'identità esistente, l'ID identità restituito dal GetOpenIdToken è uguale a quello che hai trasmesso.

Unione delle identità

Se trasmetti un token per un accesso che non è attualmente collegato a una determinata identità, bensì a un'altra, le due identità vengono unite. Una volta unita, un'identità diventa parent/owner of all associated logins and the other is disabled. In this case, the identity ID of the parent/owner restituita. È necessario aggiornare la cache locale se questo valore è diverso. I provider del AWS dispositivo mobile SDKs o AWS SDK del browser eseguono questa operazione per te. JavaScript

GetOpenIdTokenForDeveloperIdentity

L'GetOpenIdTokenForDeveloperIdentityoperazione sostituisce l'uso di GetIde GetOpenIdTokendal dispositivo quando si utilizzano identità autenticate dagli sviluppatori. Poiché l'applicazione firma le richieste di questa API operazione con AWS credenziali, Amazon Cognito ritiene che l'identificatore utente fornito nella richiesta sia valido. L'autenticazione degli sviluppatori sostituisce la convalida dei token eseguita da Amazon Cognito con provider esterni.

Il payload a tale API scopo include una mappa. logins Questa mappa deve contenere la chiave del provider di sviluppo e un valore come identificatore per l'utente del sistema. Se l'identificatore dell'utente non è già collegato a un'identità esistente, Amazon Cognito crea una nuova identità e restituisce il nuovo ID e il token OpenID Connect per l'identità. Se l'identificatore dell'utente è già collegato, Amazon Cognito restituisce l'ID di identità preesistente e il token OpenID Connect. Memorizza nella cache IDs l'identità dello sviluppatore dopo la prima richiesta e avvia le successive sessioni di base (classiche) per quell'identità conGetOpenIdTokenForDeveloperIdentity.

La risposta a una GetOpenIdTokenForDeveloperIdentity API richiesta è un token generato da Amazon Cognito. Puoi inviare questo token come parametro WebIdentityToken in una richiesta AssumeRoleWithWebIdentity.

Prima di inviare il token OpenID Connect, è necessario verificarlo nell'app. Puoi usare le OIDC librerie della tua libreria SDK o di una libreria simile aws-jwt-verifyper confermare che Amazon Cognito ha emesso il token. L'ID della chiave di firma, o kid, del token OpenID Connect è uno di quelli elencati nel documento jwks_uri† dell'identità di Amazon Cognito. Queste chiavi sono soggette a modifiche. La funzione che verifica i token di identità di Amazon Cognito deve aggiornare periodicamente l'elenco delle chiavi dal documento jwks_uri. Amazon Cognito imposta la durata dell'aggiornamento nell'intestazione della risposta cache-control di jwks_uri, attualmente con max-age impostato su 30 giorni.

Collegamento degli accessi

Come per i provider esterni, la fornitura degli accessi aggiuntivi, che non sono già associati a un'identità, implicitamente collega quegli accessi a quella identità. Se colleghi l'accesso di un provider esterno a un'identità, l'utente può utilizzare il flusso di autenticazione del provider esterno con tale provider. Tuttavia, non può usare il nome del provider degli sviluppatori nella mappa degli accessi quando chiama GetIdGetOpenIdToken.

Unione delle identità

Con le identità autenticate dagli sviluppatori, Amazon Cognito supporta sia la fusione implicita che la fusione esplicita tramite. MergeDeveloperIdentitiesAPI Tramite l'unione esplicita puoi contrassegnare due identità con gli identificatori utente nel tuo sistema come una singola identità. È sufficiente che tu fornisca gli identificatori dell'utente di origine e di destinazione e Amazon Cognito li unisce. La prossima volta che richiedi un token OpenID Connect per ciascuno degli identificatori dell'utente, viene restituito lo stesso ID identità.

AssumeRoleWithWebIdentity

Dopo aver ottenuto un token OpenID Connect, puoi scambiarlo con AWS credenziali temporanee tramite la AssumeRoleWithWebIdentityAPIrichiesta a AWS Security Token Service ().AWS STS

Poiché non esiste alcuna restrizione sul numero di identità che puoi creare, è importante comprendere le autorizzazioni che concedi agli utenti. Imposta IAM ruoli diversi per la tua applicazione: uno per gli utenti non autenticati e uno per gli utenti autenticati. La console Amazon Cognito può creare ruoli predefiniti quando configuri per la prima volta il tuo pool di identità. A questi ruoli non è effettivamente concessa alcuna autorizzazione. Modificali per soddisfare le tue esigenze.

Ulteriori informazioni su Attendibilità del ruolo e autorizzazioni.

† Il documento jwks_uri predefinito dell'identità di Amazon Cognito contiene le informazioni sulle chiavi che firmano i token per i pool di identità nella maggior parte delle Regioni AWS. Le seguenti regioni hanno documenti jwks_uri diversi.

Amazon Cognito Identity JSON web key URIs in other Regioni AWS
Regione AWS Percorso del documento jwks_uri
AWS GovCloud (Stati Uniti occidentali) https://cognito-identity.us-gov-west-1.amazonaws.com/.well-known/jwks_uri
Cina (Pechino) https://cognito-identity---cn-north-1.amazonaws.com.rproxy.goskope.com.cn/.well-known/jwks_uri
Regioni opt-in come Europa (Milano) e Africa (Città del Capo) https://cognito-identity.Region.amazonaws.com/.well-known/jwks_uri

Puoi anche estrapolare il documento jwks_uri dall'emittente, o iss, che ricevi nel token OpenID da Amazon Cognito. L'endpoint OIDC -standard discovery <issuer>/.well-known/openid-configuration elenca un percorso verso jwks_uri per il tuo token.