Endpoint Authorize - 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à.

Endpoint Authorize

L'endpoint /oauth2/authorize è un endpoint di reindirizzamento che supporta due destinazioni di reindirizzamento. Se si include un identity_provider o idp_identifier nell'URL, viene eseguito il reindirizzamento invisibile all'utente alla pagina di accesso del gestore dell'identità digitale (IdP) specificato. In caso contrario, viene eseguito il reindirizzamento all'Endpoint Login con gli stessi parametri URL inclusi nella richiesta.

L'endpoint Autorizza reindirizza gli utenti all'interfaccia utente ospitata o alla pagina di accesso IdP. La destinazione di una sessione utente su questo endpoint è una pagina web con cui l'utente deve interagire direttamente nel proprio browser.

Per utilizzare l'endpoint di autorizzazione, richiama il browser dell'utente all'indirizzo /oauth2/authorize con parametri che forniscono al pool di utenti informazioni sui seguenti dettagli del pool stesso.

  • Il client dell'app a cui vuoi accedere.

  • L'URL di callback a cui si desidera essere reindirizzati.

  • Gli ambiti OAuth 2.0 che desideri richiedere nel token di accesso dell'utente.

  • Facoltativamente, il gestore dell'identità digitale (IdP) di terze parti che desideri utilizzare per accedere.

Puoi anche specificare i parametri state e nonce utilizzati da Amazon Cognito per convalidare le richieste in arrivo.

GET /oauth2/authorize

L'endpoint /oauth2/authorize supporta solo HTTPS GET. L'app in genere avvia questa richiesta nel browser dell'utente. È possibile effettuare richieste solo all'endpoint /oauth2/authorize tramite HTTPS.

È possibile trovare ulteriori informazioni sulla definizione dell'endpoint di autorizzazione nello standard OpenID Connect (OIDC) nella pagina relativa all'endpoint di autorizzazione.

Parametri della richiesta

response_type

(Obbligatorio) Il tipo di risposta. Deve essere code o token.

Una richiesta riuscita con response_type impostato su code restituisce una concessione del codice di autorizzazione. Una concessione del codice di autorizzazione è un parametro code che Amazon Cognito aggiunge all'URL di reindirizzamento. L'app scambia il codice con l'Endpoint Token per i token di accesso, ID e aggiornamento. Come best practice di sicurezza e per ricevere token di aggiornamento per gli utenti, usa una concessione del codice di autorizzazione nella tua app.

Una richiesta riuscita con response_type impostato su token restituisce una concessione implicita. Una concessione implicita è un token di ID e accesso che Amazon Cognito aggiunge all'URL di reindirizzamento. Una concessione implicita è meno sicura perché espone i token e le potenziali informazioni di identificazione agli utenti. Puoi disattivare il supporto per le concessioni implicite nella configurazione del client dell'app.

client_id

(Obbligatorio) L'ID del client dell'app.

Il valore del parametro client_id deve essere l'ID di un client dell'app nel pool di utenti in cui si effettua la richiesta. Il client dell'app deve supportare l'accesso da parte degli utenti locali di Amazon Cognito o di almeno un gestore dell'identità digitale (IdP) di terze parti.

redirect_uri

(Obbligatorio) L'URL a cui il server di autenticazione reindirizza il browser dopo che Amazon Cognito ha autorizzato l'utente.

L'URI (Uniform Resource Identifier) di reindirizzamento deve avere i seguenti attributi:

  • Deve essere un URI assoluto.

  • Deve essere preregistrato con un client.

  • Non può includere un componente frammento.

Consulta OAuth 2.0 - Endpoint per il reindirizzamento.

Amazon Cognito richiede che l'URI di reindirizzamento utilizzi HTTPS, ad eccezione di http://localhost, che è possibile impostare come URL di callback a scopo di test.

Amazon Cognito supporta anche URL di callback come myapp://example.

state

(Facoltativo, consigliato) Quando l'app aggiunge un parametro di stato a una richiesta, Amazon Cognito ne restituisce il valore all'app quando l'/oauth2/authorizeendpoint reindirizza l'utente.

Aggiungi questo valore alle richieste di protezione contro attacchi CSRF.

Non è possibile impostare il valore di un parametro state su una stringa JSON con codifica URL. Per passare una stringa che corrisponda a questo formato in un state parametro, codifica la stringa in base64, quindi decodificala nell'app.

identity_provider

(Facoltativo) Aggiungi questo parametro per ignorare l'interfaccia utente ospitata e reindirizzare l'utente a una pagina di accesso del provider. Il valore del parametro identity_provider è il nome del provider di identità come appare nel bacino d'utenza.

  • Per i provider di social network, puoi utilizzare i valori identity_provider,, e. Facebook Google LoginWithAmazon SignInWithApple

  • Per i pool di utenti di Amazon Cognito, usa il valore. COGNITO

  • Per i provider di identità SAML 2.0 e OpenID Connect (OIDC) (IdPs), usa il nome che hai assegnato all'IdP nel tuo pool di utenti.

idp_identifier

(Facoltativo) Aggiungi questo parametro per reindirizzare a un provider con un nome alternativo per il nome identity_provider. Puoi inserire gli identificatori per SAML 2.0 e OIDC IdPs dalla scheda Esperienza di accesso della console Amazon Cognito.

scope

(Facoltativo) Può essere una combinazione di qualsiasi ambito riservato del sistema o ambito personalizzato associato a un client. Gli ambiti devono essere separati da spazi. Gli ambiti riservati al sistema sono openid, email, phone, profile e aws.cognito.signin.user.admin. Qualsiasi ambito utilizzato deve essere associato al client o verrà ignorato in fase di runtime.

Se il client non richiede alcun ambito, il server di autenticazione utilizza tutti gli ambiti associati al client.

Un token ID viene restituito solo viene richiesto l'ambito openid. Il token di accesso può essere utilizzato in relazione ai bacini d'utenza di Amazon Cognito solo se viene richiesto l'ambito aws.cognito.signin.user.admin. Gli ambiti phone, email e profile possono essere richiesti solo se viene richiesto anche l'ambito openid. Questi ambiti impongono le attestazioni da includere all'interno del token ID.

code_challenge_method

(Facoltativo) Il protocollo di hashing utilizzato per generare la sfida. Il PKCE RFC definisce due metodi, S256 e semplice; tuttavia, il server di autenticazione di Amazon Cognito supporta solo S256.

code_challenge

(Facoltativo) La sfida che hai generato da. code_verifier

Obbligatorio solo quando specifichi un parametro code_challenge_method.

nonce

(Facoltativo) Un valore casuale che puoi aggiungere alla richiesta. Il valore nonce fornito è incluso nel token ID emesso da Amazon Cognito. Per proteggersi da attacchi di tipo replay, l'app può analizzare la richiesta nonce nel token dell'ID e confrontarlo con quello generato. Per ulteriori informazioni sulla richiesta nonce, consulta la sezione relativa alla convalida del token dell'ID nella documentazione dello standard OpenID Connect.

Richieste di esempio con risposte positive

I seguenti esempi illustrano il formato delle richieste HTTP all'/oauth2/authorizeendpoint.

Concessione codice autorizzazione

Questo è un esempio di richiesta per la concessione di un codice di autorizzazione.

Esempio: richiesta GET

La seguente richiesta avvia una sessione per recuperare un codice di autorizzazione che l'utente trasmette all'app nel redirect_uri luogo di destinazione. Questa sessione richiede gli ambiti per gli attributi utente e per l'accesso alle operazioni API self-service di Amazon Cognito.

GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? response_type=code& client_id=1example23456789& redirect_uri=https://www.example.com& state=abcdefg& scope=openid+profile+aws.cognito.signin.user.admin
Esempio: risposta

Il server di autenticazione di Amazon Cognito viene reindirizzato all'app con lo stato e il codice di autorizzazione. Il codice di autorizzazione è valido per cinque minuti.

HTTP/1.1 302 Found Location: https://www.example.com?code=a1b2c3d4-5678-90ab-cdef-EXAMPLE11111&state=abcdefg

Concessione del codice di autorizzazione con PKCE

Questo è un esempio di richiesta di concessione di un codice di autorizzazione con PKCE.

Esempio: richiesta GET

La richiesta seguente aggiunge un code_challenge parametro alla richiesta precedente. Per completare lo scambio di un codice con un token, è necessario includere il code_verifier parametro nella richiesta all'/oauth2/tokenendpoint.

GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? response_type=code& client_id=1example23456789& redirect_uri=https://www.example.com& state=abcdefg& scope=aws.cognito.signin.user.admin& code_challenge_method=S256& code_challenge=a1b2c3d4...
Esempio: risposta

Il server di autenticazione reindirizza all'applicazione con il codice e lo stato di autorizzazione. Il codice e lo stato devono essere restituiti nei parametri della stringa di query e non nel frammento:

HTTP/1.1 302 Found Location: https://www.example.com?code=a1b2c3d4-5678-90ab-cdef-EXAMPLE11111&state=abcdefg

Concessione del token senza ambito openid

Questa è una richiesta di esempio che genera una concessione implicita e restituisce JWT direttamente alla sessione dell'utente.

Esempio: richiesta GET

La seguente richiesta riguarda una concessione implicita dal server di autorizzazione. Il token di accesso di Amazon Cognito autorizza le operazioni API self-service.

GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? response_type=token& client_id=1example23456789& redirect_uri=https://www.example.com& state=abcdefg& scope=aws.cognito.signin.user.admin
Esempio: risposta

Il server di autorizzazione di Amazon Cognito viene reindirizza all'app con il token di accesso. Poiché non è stato richiesto l'ambito del openid, Amazon Cognito non restituisce un token ID. Inoltre, Amazon Cognito non restituisce un token di aggiornamento in questo flusso. Amazon Cognito restituisce il token di accesso e lo stato nel frammento e non nella stringa di query:

HTTP/1.1 302 Found Location: https://YOUR_APP/redirect_uri#access_token=ACCESS_TOKEN&token_type=bearer&expires_in=3600&state=STATE

Concessione del token con ambito openid

Questo è un esempio di richiesta che genera una concessione implicita e restituisce JWT direttamente alla sessione dell'utente.

Esempio: richiesta GET

La seguente richiesta riguarda una concessione implicita dal server di autorizzazione. Il token di accesso di Amazon Cognito autorizza l'accesso agli attributi utente e alle operazioni API self-service.

GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? response_type=token& client_id=1example23456789& redirect_uri=https://www.example.com& state=abcdefg& scope=aws.cognito.signin.user.admin+openid+profile
Esempio: risposta

Il server di autorizzazione reindirizza all'app con il token di accesso e il token ID (poiché l'openidambito era incluso):

HTTP/1.1 302 Found Location: https://www.example.com#id_token=eyJra67890EXAMPLE&access_token=eyJra12345EXAMPLE&token_type=bearer&expires_in=3600&state=abcdefg

Esempi di risposte negative

Amazon Cognito potrebbe rifiutare la tua richiesta. Le richieste negative sono accompagnate da un codice di errore HTTP e da una descrizione che puoi utilizzare per correggere i parametri della richiesta. Di seguito sono riportati alcuni esempi di risposte negative.

  • Se client_id e redirect_uri sono validi, ma i parametri della richiesta non sono formattati correttamente, il server di autenticazione reindirizza l'errore al client redirect_uri e aggiunge un messaggio di errore in un parametro URL. Di seguito sono riportati alcuni esempi di formattazione errata.

    • La richiesta non include un response_type parametro.

    • La richiesta di autorizzazione ha fornito un code_challenge parametro, ma non un code_challenge_method parametro.

    • Il valore del code_challenge_method parametro non lo èS256.

    Di seguito è riportata la risposta a una richiesta di esempio con una formattazione errata.

    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request
  • Se il client richiede code o token accederesponse_type, ma non dispone dell'autorizzazione per queste richieste, il server di autorizzazione Amazon Cognito torna unauthorized_client a quello del clientredirect_uri, come segue:

    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=unauthorized_client
  • Se il client richiede un ambito non valido, sconosciuto o non corretto, il server di autorizzazione di Amazon Cognito restituisce invalid_scope al redirect_uri del client, come riportato di seguito:

    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_scope
  • Se si verifica un errore imprevisto nel server, il server di autenticazione torna server_error a quello del redirect_uri client. Poiché l'errore HTTP 500 non viene inviato al client, l'errore non viene visualizzato nel browser dell'utente. Il server di autorizzazione restituisce il seguente errore.

    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=server_error
  • Quando Amazon Cognito esegue l'autenticazione tramite federazione a terze parti, Amazon IdPs Cognito potrebbe riscontrare problemi di connessione, come i seguenti:

    • Se si verifica un timeout di connessione durante la richiesta del token dal provider di identità, il server di autenticazione reindirizza l'errore al redirect_uri del client come segue:

      HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Timeout+occurred+in+calling+IdP+token+endpoint
    • Se si verifica un timeout di connessione durante la chiamata all'jwks_uriendpoint per la convalida del token ID, il server di autenticazione reindirizza con un errore al client nel modo seguente: redirect_uri

      HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=error_description=Timeout+in+calling+jwks+uri
  • Durante l'autenticazione mediante federazione a terze parti IdPs, i provider possono restituire risposte di errore. Ciò può essere dovuto a errori di configurazione o ad altri motivi, come i seguenti:

    • Se viene ricevuta una risposta di errore da altri provider, il server di autenticazione reindirizza l'errore al redirect_uri del client come segue:

      HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=[IdP name]+Error+-+[status code]+error getting token
    • Se viene ricevuta una risposta di errore da Google, il server di autenticazione reindirizza l'errore al redirect_uri del client come segue:

      HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Google+Error+-+[status code]+[Google-provided error code]
  • Quando Amazon Cognito rileva un'eccezione di comunicazione quando si connette a un IdP esterno, il server di autenticazione reindirizza con un errore al client con uno dei seguenti messaggi: redirect_uri

    • HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Connection+reset
    • HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Read+timed+out