Flusso di autenticazione dei pool di identità (identità federate) - 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à (identità federate)

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 Ruoli IAM.

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
SAML 2.0 Asserzione SAML
Fornitore di servizi sociali 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 web JSON o un'asserzione SAML, 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. La tua applicazione firma le richieste AWS API con le credenziali temporanee.

L'autenticazione avanzata gestisce la logica della selezione dei ruoli IAM e del recupero delle credenziali nella configurazione del pool di identità. Puoi configurare il tuo pool di identità per selezionare un ruolo predefinito, per applicare i principi del controllo degli accessi basato sugli attributi (ABAC) o del controllo degli accessi basato sui ruoli (RBAC) alla selezione dei ruoli. 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 web JSON o un'asserzione SAML, 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 le richieste AWS API 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 attendibilità sufficiente. Puoi anche richiedere una durata della sessione del ruolo personalizzata.

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 (pool di identità), 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 in 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 richiesta GetOpenIdTokenForDeveloperIdentityAPI 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 richieste API.

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

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

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 ruoli IAM per le identità web. Quindi incorpora la logica per la selezione dei ruoli nel tuo client e proteggi il client dalle modifiche da parte degli utenti.

Il flusso di autenticazione di base delega la logica della selezione dei ruoli IAM alla tua 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 ruolo IAM 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.

Riepilogo delle API

GetId

La chiamata GetIdAPI è 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 caratteristica è abilitata nel pool di identità, gli utenti possono richiedere un nuovo ID identità in qualsiasi momento tramite l'API GetId. È previsto che l'applicazione memorizzi nella cache questo ID identità per effettuare chiamate successive a Amazon Cognito. Gli SDK per AWS dispositivi mobili e l' AWS SDK for JavaScript in the Browser dispongono di fornitori di credenziali che gestiscono questa memorizzazione nella cache per te.

Accesso autenticato

Una volta che hai configurato la tua applicazione con il supporto per un provider di accesso pubblico (Facebook, Google +, Login with Amazon o Accedi con Apple), gli utenti sono anche in grado di fornire i token (OAuth o OpenID Connect) che li identificano in quei 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

L'GetCredentialsForIdentityAPI può essere richiamata dopo aver stabilito un ID di identità. Questa operazione è funzionalmente equivalente alla chiamata GetOpenIdToken, quindi AssumeRoleWithWebIdentity.

Affinché Amazon Cognito possa chiamare AssumeRoleWithWebIdentity per tuo conto, il tuo bacino d'utenza deve avere i ruoli IAM ad esso associati. Puoi farlo tramite la console Amazon Cognito o manualmente tramite l'SetIdentityPoolRolesoperazione.

GetOpenIdToken

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

La risposta a una richiesta API GetOpenIdToken è 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 utilizzare le librerie OIDC dell'SDK o una libreria come aws-jwt-verify per verificare che Amazon Cognito abbia emesso il token. L'ID della chiave di firma, o kid, del token OpenID è 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.

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 unite, un'identità diventa principale/proprietaria di tutti gli accessi associati e l'altra è disattivata. In questo caso, l'ID identità principale/proprietario viene restituito. È necessario aggiornare la cache locale se questo valore è diverso. I provider degli SDK AWS mobili o dell' AWS SDK per JavaScript il browser eseguono questa operazione per te.

GetOpenIdTokenForDeveloperIdentity

L'GetOpenIdTokenForDeveloperIdentityoperazione sostituisce l'uso di GetIde GetOpenIdTokendal dispositivo quando si utilizzano identità autenticate dagli sviluppatori. Poiché l'applicazione firma le richieste a questa operazione API 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 per questa API include una mappa. logins Questa mappa deve contenere la chiave del provider di sviluppo e un valore come identificatore per l'utente nel 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 gli ID di identità autenticate da sviluppatori nella cache dopo la prima richiesta e avvia le successive sessioni di base (classiche) per l'identità con GetOpenIdTokenForDeveloperIdentity.

La risposta a una richiesta API GetOpenIdTokenForDeveloperIdentity è 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 utilizzare le librerie OIDC dell'SDK o una libreria come aws-jwt-verify per verificare che Amazon Cognito abbia 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 l'API. MergeDeveloperIdentities 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 richiesta AssumeRoleWithWebIdentityAPI 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. Configura diversi ruoli IAM 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 di rilevamento standard OIDC <issuer>/.well-known/openid-configuration elenca il percorso del documento jwks_uri per il token.