Client dell'app pool di 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à.

Client dell'app pool di utenti

Un client dell'app del pool di utenti è una configurazione all'interno di un pool di utenti che interagisce con un'applicazione per dispositivi mobili o Web che esegue l'autenticazione con Amazon Cognito. I client di app possono chiamare operazioni API autenticate e non autenticate, nonché leggere o modificare alcuni o tutti gli attributi degli utenti. L'app deve identificarsi con il client dell'app durante le operazioni di registrazione, accesso e gestione delle password dimenticate. Queste richieste API devono includere identificazione automatica con un ID del client dell'app e l'autorizzazione con un segreto client opzionale. È responsabilità dell'utente proteggere eventuali ID o segreti del client dell'app in modo che solo le app client autorizzate possano chiamare queste operazioni non autenticate. Inoltre, se configuri la tua app per firmare richieste API autenticate con AWS credenziali, devi proteggere le tue credenziali dall'ispezione da parte degli utenti.

È possibile creare più client app per un bacino d'utenza. Un client dell'app potrebbe essere collegato alla piattaforma di codice di un'app o a un tenant separato nel pool di utenti. Ad esempio, puoi creare un'app per un'applicazione lato server e un'app Android diversa. Ogni app ha il proprio ID client.

Tipi di client di app

Quando crei un client dell'app in Amazon Cognito, puoi precompilare le opzioni in base ai tipi di client OAuth standard client pubblico e client riservato. Configurare un client riservato con un client secret. Per ulteriori informazioni sui tipi di client, vedere IETF RFC 6749 #2.1.

Client pubblico

Un client pubblico viene eseguito in un browser o su un dispositivo mobile. Poiché non dispone di risorse affidabili sul lato server, non ha un client secret.

Client riservato

Un client riservato dispone di risorse lato server che possono essere attendibili e di un client secret per operazioni API non autenticate L'app potrebbe essere eseguita come daemon o script di shell sul server back-end.

Client secret

Un client secret, o client password, è una stringa fissa che l'app deve utilizzare in tutte le richieste API che invia al client dell'app. Il client dell'app deve avere un client secret per eseguire la concessione di client_credentials. Per ulteriori informazioni, consulta IETF RFC 6749 #2.3.1.

Non puoi modificare il client secret una volta che hai creato un'app. Puoi creare una nuova app con un nuovo client secret se desideri ruotare la chiave privata che stai utilizzando. Puoi anche eliminare un'app per bloccare l'accesso da app che usano l'ID client di quell'app.

È possibile utilizzare un client riservato e un client secret con un'app pubblica. Usa un CloudFront proxy Amazon per aggiungere un proxy SECRET_HASH in transito. Per ulteriori informazioni, consulta Proteggere i client pubblici per Amazon Cognito utilizzando un CloudFront proxy Amazon sul AWS blog.

Token web JSON

I client dell'app Amazon Cognito possono emettere token web JSON (JWT) dei seguenti tipi.

Token di identità (ID)

Una dichiarazione verificabile attestante che l'utente è autenticato dal pool di utenti. OpenID Connect (OIDC) ha aggiunto la specifica del token ID agli standard dei token di accesso e aggiornamento definiti da OAuth 2.0. Il token ID contiene informazioni sull'identità, come gli attributi utente, che l'app può utilizzare per creare un profilo utente e fornire risorse. Per ulteriori informazioni, consulta Utilizzo di token ID.

Token di accesso

Una dichiarazione verificabile dei diritti di accesso dell'utente. Il token di accesso contiene gli ambiti, una funzionalità di OIDC e OAuth 2.0. L'app può presentare gli ambiti delle risorse di back-end e dimostrare che il pool di utenti ha autorizzato un utente o una macchina ad accedere ai dati da un'API o ai propri dati utente. Un token di accesso con ambiti personalizzati, spesso ottenuto tramite una concessione di credenziali client M2M, autorizza l'accesso a un server di risorse. Per ulteriori informazioni, consulta Utilizzo del token di accesso.

Token di aggiornamento

Una dichiarazione crittografata di autenticazione iniziale che l'app può presentare al pool di utenti quando i token dell'utente scadono. Una richiesta refresh-token restituisce token di accesso e ID nuovi e non scaduti. Per ulteriori informazioni, consulta Utilizzo del token di aggiornamento.

Puoi impostare la scadenza di questi token per ogni client dell'app dalla scheda Integrazione app del tuo pool di utenti nella console Amazon Cognito.

Termini del client dell'app

I termini seguenti sono proprietà disponibili dei client di app nella console Amazon Cognito.

URL di callback consentiti

Un URL di callback indica dove l'utente deve essere reindirizzato dopo aver effettuato correttamente l'accesso. Scegli almeno un URL di callback. L'URL di callback deve:

  • Deve essere un URI assoluto.

  • Deve essere preregistrato con un client.

  • Non deve includere un componente di frammento.

Consulta OAuth 2.0 - redirection endpoint (OAuth 2.0 - Endpoint di reindirizzamento).

Amazon Cognito richiede HTTPS su HTTP tranne che per http://localhost a solo scopo di test.

Sono supportati anche URL di callback come myapp://example.

URL di disconnessione consentiti

Un URL di disconnessione indica dove l'utente deve essere reindirizzato dopo la disconnessione.

Autorizzazioni di lettura e scrittura dell'attributo

Il tuo pool di utenti potrebbe avere molti clienti, ognuno con il proprio client di app e IdPs. Puoi configurare il client dell'app in modo che abbia accesso in lettura e scrittura solo agli attributi utente pertinenti all'app. In casi come l'autorizzazione machine-to-machine (M2M), puoi concedere l'accesso a nessuno dei tuoi attributi utente.

Considerazioni sulla configurazione delle autorizzazioni di lettura e scrittura degli attributi
  • Quando crei un client per app e non personalizzi le autorizzazioni di lettura e scrittura degli attributi, Amazon Cognito concede le autorizzazioni di lettura e scrittura a tutti gli attributi del pool di utenti.

  • Puoi concedere l'accesso in scrittura ad attributi personalizzati non modificabili. L'app client può scrivere un valore in un attributo non modificabile solo quando crei o registri un utente. Dopodiché, non puoi scrivere valori in alcun attributo personalizzato non modificabile per l'utente.

  • I client dell'app devono avere accesso in scrittura agli attributi richiesti nel pool di utenti. La console Amazon Cognito imposta automaticamente gli attributi richiesti come scrivibili.

  • Non puoi consentire a un client dell'app di avere accesso in scrittura a email_verified o a phone_number_verified. Un amministratore del pool di utenti può modificare questi valori. Un utente può modificare il valore di questi attributi solo tramite la verifica degli attributi.

Flusso di autenticazione

I metodi di accesso consentiti dal client dell'app. L'app può supportare l'autenticazione con nome utente e password, Secure Remote Password (SRP), l'autenticazione personalizzata con trigger Lambda e l'aggiornamento dei token. Come migliore pratica di sicurezza, utilizza l'autenticazione SRP come metodo di accesso principale. L'interfaccia utente ospitata accede automaticamente agli utenti con SRP.

Ambiti personalizzati

Un ambito personalizzato è quello che viene definito per il proprio server di risorse nella scheda Resource Servers (Server di Risorse). Il formato è/scope. resource-server-identifier Per informazioni, consulta Autorizzazione Scopes, M2M e API con server di risorse.

URI di reindirizzamento predefinito

Sostituisce il redirect_uri parametro nelle richieste di autenticazione per gli utenti con terze parti. IdPs Configura questa impostazione del client dell'app con il DefaultRedirectURI parametro di una richiesta CreateUserPoolCliento UpdateUserPoolClientAPI. Questo URL deve inoltre essere un membro del client CallbackURLs for your app. Amazon Cognito reindirizza le sessioni autenticate a questo URL quando:

  1. Al client dell'app è assegnato un provider di identità e sono definiti più URL di callback. Il pool di utenti reindirizza le richieste di autenticazione al server di autorizzazione all'URI di reindirizzamento predefinito quando non includono un parametro. redirect_uri

  2. Il client dell'app ha un provider di identità assegnato e un URL di callback definito. In questo scenario non è necessario definire un URL di callback predefinito. Le richieste che non includono un redirect_uri parametro reindirizzano all'unico URL di callback disponibile.

Provider di identità

Puoi scegliere alcuni o tutti i provider di identità esterni del tuo pool di utenti (IdPs) per autenticare i tuoi utenti. Il client di app può inoltre autenticare solo gli utenti locali del pool di utenti. Quando si aggiunge un provider di identità al client di app, è possibile generare link di autorizzazione per l'IdP e visualizzarli nella pagina di accesso dell'interfaccia utente ospitata. È possibile assegnarne più di uno IdPs, ma è necessario assegnarne almeno uno. Per ulteriori informazioni sull'utilizzo di dispositivi esterni IdPs, vedere. Aggiunta di un accesso al bacino d'utenza tramite terze parti

Ambiti OpenID Connect

Scegli uno o più dei seguenti ambiti OAuth per specificare i privilegi di accesso che possono essere richiesti per i token d'accesso.

  • L'ambito openid dichiara che desideri recuperare un token ID e l'ID univoco di un utente. Richiede inoltre tutti o alcuni attributi utente, a seconda degli ambiti aggiuntivi nella richiesta. Amazon Cognito non restituisce un token ID a meno che non venga richiesto l'ambito openid. L'ambito openid autorizza le attestazioni dei token ID strutturali come la scadenza e l'ID chiave e determina gli attributi utente che ricevi in una risposta da Endpoint UserInfo.

    • Quando openid è l'unico ambito richiesto, Amazon Cognito popola il token ID con tutti gli attributi utente che il client dell'app corrente è in grado di leggere. La risposta userInfo a un token di accesso con questo ambito restituisce tutti gli attributi utente.

    • Quando richiedi openid con altri ambiti come phone, email o profile, il token ID e userInfo restituiscono l'ID univoco dell'utente e gli attributi definiti dagli ambiti aggiuntivi.

  • L'ambito phone permette l'accesso alle richieste phone_number e phone_number_verified. Questo ambito può essere richiesto solo con l'ambito openid.

  • L'ambito email permette l'accesso alle richieste email e email_verified. Questo ambito può essere richiesto solo con l'ambito openid.

  • L'aws.cognito.signin.user.adminambito consente l'accesso alle operazioni API dei pool di utenti di Amazon Cognito che richiedono token di accesso, come e. UpdateUserAttributesVerifyUserAttribute

  • L'ambito profile permette l'accesso a tutti gli attributi dell'utente negli ID token che sono leggibili dal client. Questo ambito può essere richiesto solo con l'ambito openid.

Per ulteriori informazioni sugli ambiti, consulta la lista degli ambiti OIDC standard.

Tipi di concessione OAuth

Una concessione OAuth è un metodo di autenticazione che recupera i token del pool di utenti. Amazon Cognito supporta i seguenti tipi di concessioni. Per integrare queste concessioni OAuth nella tua app, devi aggiungere un dominio al tuo pool di utenti.

Concessione codice autorizzazione

La concessione del codice di autorizzazione genera un codice che l'app può scambiare con i token del pool di utenti con Endpoint Token. Durante lo scambio di un codice di autorizzazione, l'app riceve token ID, di accesso e di aggiornamento. Questo flusso OAuth, come la concessione implicita, avviene nei browser degli utenti. La concessione di un codice di autorizzazione è la concessione più sicura offerta da Amazon Cognito, poiché i token non sono visibili nelle sessioni degli utenti. Invece, l'app genera la richiesta che restituisce i token e può memorizzarli nella cache in uno spazio di archiviazione protetto. Per ulteriori informazioni, vedere Codice di autorizzazione in IETF RFC 6749 #1 .3.1

Nota

Come best practice di sicurezza nelle app per client pubblici, attiva solo il flusso OAuth di concessione del codice di autorizzazione e implementa Proof Key for Code Exchange (PKCE) per limitare lo scambio di token. Con PKCE, un client può scambiare un codice di autorizzazione solo dopo aver fornito all'endpoint del token lo stesso segreto presentato nella richiesta di autenticazione originale. Per ulteriori informazioni, consulta IETF RFC 7636.

Implicit grant (Concessione implicita)

La concessione implicita fornisce un token di accesso e ID, ma non un token di aggiornamento, alla sessione del browser dell'utente direttamente da Endpoint Authorize. Una concessione implicita rimuove il requisito di una richiesta separata all'endpoint del token, ma non è compatibile con PKCE e non restituisce token di aggiornamento. Questa concessione supporta scenari di test e architetture di app che non consentono di completare la concessione di codici di autorizzazione. Per ulteriori informazioni, consulta Concessione implicita in IETF RFC 6749 #1.3.2. Puoi attivare sia la concessione del codice di autorizzazione sia la concessione implicita in un client dell’app e usare entrambe in base alle esigenze.

Concessione credenziali del client

La concessione delle credenziali del client è per le comunicazioni machine-to-machine (M2M). Il codice di autorizzazione e le concessioni implicite emettono token a utenti umani autenticati. Le credenziali del client concedono l'autorizzazione basata sull'ambito da un sistema non interattivo a un'API. L'app può richiedere le credenziali del client direttamente dall'endpoint del token e ricevere un token di accesso. Per ulteriori informazioni, consulta Credenziali del client in IETF RFC 6749 #1 .3.4. È possibile attivare la concessione di credenziali client solo nei client di app che dispongono di un client secret e che non supportano il codice di autorizzazione o le concessioni implicite.

Nota

Poiché il flusso di credenziali del client non viene richiamato come un utente, questa concessione può solo aggiungere ambiti personalizzati per accedere ai token. Un ambito personalizzato è quello che viene definito per il proprio server di risorse. Gli ambiti predefiniti come openid e profile non si applicano agli utenti non umani.

Poiché i token ID sono una convalida degli attributi utente, non sono rilevanti per la comunicazione M2M e una concessione delle credenziali del client non li rilascia. Per informazioni, consulta Autorizzazione Scopes, M2M e API con server di risorse.

Le credenziali del cliente garantiscono costi aggiuntivi alla fattura. AWS Per ulteriori informazioni, consultare Prezzi di Amazon Cognito.

Creazione di un client dell'app

AWS Management Console
Come creare un client dell'app (console)
  1. Passa alla console Amazon Cognito. Se richiesto, inserisci le tue credenziali. AWS

  2. Scegli User Pools (Pool di utenti).

  3. Scegli un bacino d'utenza esistente dall'elenco o creane uno nuovo.

  4. Seleziona la scheda App integration (Integrazione App).

  5. Alla voce App clients (Client dell'App), seleziona Create an App client (Crea un client dell'App).

  6. Seleziona un App type (Tipo di App): Public client (Client pubblico), Confidential client (Client riservato), oppure Other (Altro).

  7. Inserisci un nome del client dell'App.

  8. Scegli Genera segreto del client per fare in modo che Amazon Cognito generi automaticamente un segreto del client. I segreti client sono generalmente associati ai client riservati.

  9. Seleziona i Authentication flows (Flussi di autenticazione) che desideri per entrare nel tuo client App.

  10. Configurazione di Authentication flow session duration (Durata della sessione del flusso di autenticazione). Questo è il tempo a disposizione degli utenti per completare ogni verifica di autenticazione prima della scadenza del token di sessione.

  11. (Facoltativo) Se desideri configurare la scadenza dei token, completa la procedura seguente:

    1. Specifica la scadenza del token di aggiornamento del client dell'App. Il valore predefinito è 30 giorni. Puoi modificarlo con qualsiasi valore compreso tra 1 ora e 10 anni.

    2. Specifica la scadenza del token di accesso del client dell'App. Il valore predefinito è 1 ora. Puoi modificarlo con qualsiasi valore compreso tra 5 minuti e 24 ore.

    3. Specifica la scadenza del token ID del client dell'App. Il valore predefinito è 1 ora. Puoi modificarlo con qualsiasi valore compreso tra 5 minuti e 24 ore.

      Importante

      Se utilizzi l'interfaccia utente ospitata e configuri un valore minimo inferiore a un'ora per i token, l'utente sarà in grado di utilizzare i token in base alla durata dei cookie di sessione, attualmente impostata su un'ora.

  12. Scegli se desideri abilitare la revoca dei token per questo client dell'App. Ciò aumenterà la dimensione dei token emessi da Amazon Cognito.

  13. Scegli se desideri prevenire errori di presenza degli utenti per questo client di app. Amazon Cognito risponderà alle richieste di accesso per utenti inesistenti con un messaggio generico che indica che il nome utente o la password non erano corretti.

  14. Se desideri utilizzare l'interfaccia utente ospitata con questo client di app, configura Impostazioni dell'interfaccia utente ospitata.

    1. Inserisci uno o più URL di callback permessi. Questi sono gli URL web o dell’app verso cui Amazon Cognito deve reindirizzare gli utenti dopo aver completato l'autenticazione.

    2. Inserisci uno o più URL di disconnessione consentiti. Questi sono gli URL che l’app deve accettare nelle richieste a Endpoint Logout.

    3. Scegli uno o più provider di identità per consentire l’accesso degli utenti alla tua app. Puoi scegliere qualsiasi combinazione di combinazioni esistenti. IdPs Puoi autenticare gli utenti solo con il tuo pool di utenti o con una o più terze parti IdPs configurate nel tuo pool di utenti.

    4. Scegli i tipi di concessione OAuth 2.0 che devono essere accettati dal client di app.

      • Seleziona Concessione del codice di autorizzazione per trasferire i codici all’app che può riscattare in token con Endpoint Token.

      • Seleziona Concessione implicita per passare token ID e di accesso direttamente all’app. Il flusso di concessione implicita espone i token direttamente agli utenti.

      • Seleziona Credenziali del client per passare i token di accesso all’app in base alla sua conoscenza non delle credenziali utente, ma del segreto del client. Il flusso di concessione delle credenziali del cliente è reciprocamente esclusivo con il codice di autorizzazione e i flussi di concessione implicita.

    5. Seleziona gli Ambiti OpenID Connect che intendi autorizzare per l’utilizzo con questo client di app. Puoi generare token di accesso solo con l'ambito aws.cognito.signin.user.admin tramite l'API dei pool di utenti. Per ambiti aggiuntivi, occorre richiedere i token di accesso dal Endpoint Token.

    6. Scegli gli Ambiti personalizzati che intendi autorizzare con il client di app. Gli ambiti personalizzati vengono spesso utilizzati per autorizzare l'accesso ad API di terze parti.

  15. Configura Autorizzazioni di lettura e scrittura degli attributi per questo client di app. Il client di app può disporre dell'autorizzazione per leggere e scrivere tutto, o un sottoinsieme limitato dello, schema degli attributi del pool di utenti.

  16. Scegli Create app client (Crea client dell'app).

  17. Fai attenzione all'ID client. Questo identificherà il client dell'App nelle richieste di registrazione e di accesso.

AWS CLI
aws cognito-idp create-user-pool-client --user-pool-id MyUserPoolID --client-name myApp
Nota

Utilizza il formato JSON per URL di callback e disconnessione per impedire a CLI di trattarli come file di parametri remoti:

--callback-urls "["https://example.com"]" --logout-urls "["https://example.com"]"

Per ulteriori informazioni, consulta il riferimento ai AWS CLI comandi: create-user-pool-client

Amazon Cognito user pools API

Genera una richiesta CreateUserPoolClientAPI. È necessario specificare un valore per tutti i parametri che non si desidera impostare su un valore predefinito.

Aggiornamento del client (AWS CLI e dell' AWS API) di un'app per pool di utenti

Al AWS CLI, inserisci il seguente comando:

aws cognito-idp update-user-pool-client --user-pool-id "MyUserPoolID" --client-id "MyAppClientID" --allowed-o-auth-flows-user-pool-client --allowed-o-auth-flows "code" "implicit" --allowed-o-auth-scopes "openid" --callback-urls "["https://example.com"]" --supported-identity-providers "["MySAMLIdP", "LoginWithAmazon"]"

Se il comando ha esito positivo, AWS CLI restituisce una conferma:

{ "UserPoolClient": { "ClientId": "MyClientID", "SupportedIdentityProviders": [ "LoginWithAmazon", "MySAMLIdP" ], "CallbackURLs": [ "https://example.com" ], "AllowedOAuthScopes": [ "openid" ], "ClientName": "Example", "AllowedOAuthFlows": [ "implicit", "code" ], "RefreshTokenValidity": 30, "AuthSessionValidity": 3, "CreationDate": 1524628110.29, "AllowedOAuthFlowsUserPoolClient": true, "UserPoolId": "MyUserPoolID", "LastModifiedDate": 1530055177.553 } }

Per ulteriori informazioni, vedere il riferimento ai AWS CLI comandi: update-user-pool-client.

AWS API: UpdateUserPoolClient

Ottenere informazioni su un client di app con pool di utenti (AWS CLI e AWS API)

aws cognito-idp describe-user-pool-client --user-pool-id MyUserPoolID --client-id MyClientID

Vedi il riferimento ai AWS CLI comandi per ulteriori informazioni: describe-user-pool-client.

AWS API: DescribeUserPoolClient

Elenco di tutte le informazioni sui client dell'app in un pool di utenti (AWS CLI e AWS API)

aws cognito-idp list-user-pool-clients --user-pool-id "MyUserPoolID" --max-results 3

Vedi il riferimento ai AWS CLI comandi per ulteriori informazioni: list-user-pool-clients.

AWS API: ListUserPoolClients

Eliminazione di un client (AWS CLI e di un' AWS API) per l'app del pool di utenti

aws cognito-idp delete-user-pool-client --user-pool-id "MyUserPoolID" --client-id "MyAppClientID"

Per ulteriori informazioni, consulta il riferimento ai AWS CLI comandi: delete-user-pool-client

AWS API: DeleteUserPoolClient