Point de terminaison AUTORISATION - Amazon Cognito

Point de terminaison AUTORISATION

Le point de terminaison /oauth2/authorize connecte l'utilisateur.

GET /oauth2/authorize

Le point de terminaison /oauth2/authorize prend uniquement en charge HTTPS GET. Le client du groupe d'utilisateurs adresse généralement cette demande via un navigateur. Les navigateurs web incluent Chrome ou Firefox. Les navigateurs Android comprennent l'onglet Chrome personnalisé. Les navigateurs iOS incluent le contrôle Vue Safari.

Le serveur d'autorisation exige HTTPS plutôt que HTTP comme protocole lors de l'accès au point de terminaison d'autorisation. Pour plus d'informations à partir de la norme OpenID Connect, consultez Point de terminaison d'autorisation.

Paramètres de requête

response_type

Type de réponse. Doit être code ou token. Indique si le client souhaite un code d'autorisation (flux d'octroi de code d'autorisation) pour l'utilisateur ou s'il émet directement des jetons pour l'utilisateur (flux implicite).

Obligatoire.

client_id

ID du client.

Il doit s'agir d'un client que vous avez déjà enregistré dans le groupe d'utilisateurs et qualifié pour la fédération.

Obligatoire.

redirect_uri

URL vers laquelle le serveur d'authentification redirige le navigateur une fois qu'Amazon Cognito a autorisé l'utilisateur.

Un identificateur de ressource uniforme (URI) de redirection doit avoir les attributs suivants :

  • Il doit s'agir d'un URI absolu.

  • Vous devez avoir préalablement enregistré l'URI avec un client.

  • Il ne peut pas inclure un composant de fragment.

Veuillez consulter OAuth 2.0 - Redirection Endpoint.

Amazon Cognito exige HTTPS plutôt que HTTP, sauf pour http://localhost à des fins de test uniquement.

Amazon Cognito prend également en charge les URL de rappel d'application comme myapp://example.

Obligatoire.

état

Valeur opaque que le client ajoute à la demande initiale. Le serveur d'autorisation inclut cette valeur lors de la redirection vers le client.

Le client doit utiliser cette valeur pour empêcher les attaques de type CSRF.

Facultative mais recommandée.

identity_provider

Ajoutez ce paramètre pour contourner l'interface utilisateur hébergée et rediriger votre utilisateur vers une page de connexion de fournisseur. La valeur du paramètre identity_provider est le nom du fournisseur d'identité, tel qu'il apparaît dans votre groupe d'utilisateurs.

  • Pour les fournisseurs sociaux, vous pouvez utiliser les valeurs identity_provider de Facebook, Google, LoginWithAmazon et SignInWithApple.

  • Pour les groupes d'utilisateurs Amazon Cognito, utilisez la valeur COGNITO.

  • Pour les fournisseurs d'identité SAML et OIDC, utilisez le nom que vous avez attribué au fournisseur d'identité dans votre groupe d'utilisateurs.

Facultatif.

idp_identifier

Ajoutez ce paramètre pour rediriger vers un fournisseur avec un autre nom pour le nom identity_provider. Vous pouvez saisir des identifiants pour vos fournisseurs d'identité SAML et OIDC à partir de l'onglet Sign-in experience (Expérience de connexion) de la console Amazon Cognito.

Facultatif.

portée

Peut être une combinaison de tous les périmètres réservés au système ou personnalisées qui sont associées à un client. Les périmètres doivent être séparés par des espaces. Les périmètres dédiés à un système sont openid, email, phone, profile et aws.cognito.signin.user.admin. Tout périmètre utilisé doit être associé au client. Dans le cas contraire, il sera ignoré lors de l'exécution.

Si le client ne demande pas de périmètre, le serveur d'authentification utilise tous les périmètres associés au client.

Un jeton d'identification est renvoyé uniquement si le paramètre openid est demandé. Le jeton d'accès peut être utilisé pour des groupes d'utilisateurs Amazon Cognito que si le périmètre aws.cognito.signin.user.admin est demandé. Les paramètres scope phone, email et profile peuvent uniquement être demandés si le paramètre scope openid est également demandé. Ces paramètres scope régissent les demandes qui font partie du jeton d'identification.

Facultatif.

code_challenge_method

Méthode que vous avez utilisée pour générer la stimulation. Le PKCE RFC définit deux méthodes, S256 et « plain » . Cependant, le serveur d'authentification Amazon Cognito ne prend en charge que la méthode S256.

Facultatif.

code_challenge

Stimulation que vous avez générée à partir de code_verifier.

Obligatoire uniquement lorsque vous spécifiez un paramètre code_challenge_method.

nonce

Valeur aléatoire que vous pouvez ajouter à la demande. La valeur nonce que vous fournissez est incluse dans le jeton d'identification émis par Amazon Cognito. Vous pouvez utiliser une valeur nonce pour vous protéger contre les attaques de relecture.

Exemples de demandes avec des réponses positives

Octroi de code d'autorisation

Exemple de demande

GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? response_type=code& client_id=ad398u21ijw3s9w3939& redirect_uri=https://YOUR_APP/redirect_uri& state=STATE& scope=openid+profile+aws.cognito.signin.user.admin

Exemple de réponse

Le serveur d'authentification Amazon Cognito effectue une redirection vers votre application avec le code d'autorisation et l'état. Le code et l'état doivent être renvoyés dans les paramètres de chaîne de requête et non pas dans le fragment. Une chaîne de requête est la partie d'une demande web qui s'affiche après un caractère « ? » ; la chaîne peut contenir un ou plusieurs paramètres séparés par des caractères « & ». Un fragment est la partie d'une demande Web qui s'affiche après un caractère « # » pour spécifier une sous-section d'un document.

Note

La réponse renvoie un code d'utilisation à usage unique qui est valide pendant cinq minutes.

HTTP/1.1 302 Found Location: https://YOUR_APP/redirect_uri?code=AUTHORIZATION_CODE&state=STATE

Octroi de code d'autorisation avec PKCE

Exemple de demande

GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? response_type=code& client_id=ad398u21ijw3s9w3939& redirect_uri=https://YOUR_APP/redirect_uri& state=STATE& scope=aws.cognito.signin.user.admin& code_challenge_method=S256& code_challenge=CODE_CHALLENGE

Exemple de réponse

Le serveur d'authentification procède à la redirection vers votre application avec le code d'autorisation et l'état. Le code et l'état doivent être renvoyés dans les paramètres de chaîne de requête et non pas dans le fragment.

HTTP/1.1 302 Found Location: https://YOUR_APP/redirect_uri?code=AUTHORIZATION_CODE&state=STATE

Octroi de jeton sans paramètre de périmètre openid

Exemple de demande

GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? response_type=token& client_id=ad398u21ijw3s9w3939& redirect_uri=https://YOUR_APP/redirect_uri& state=STATE& scope=aws.cognito.signin.user.admin

Exemple de réponse

Le serveur d'autorisation Amazon Cognito effectue une redirection vers votre application avec un jeton d'accès. Comme la portée openid n'a pas été demandée, Amazon Cognito ne renvoie pas de jeton d'identification. De plus, Amazon Cognito ne renvoie pas de jeton d'actualisation dans ce flux. Amazon Cognito renvoie l'état et le jeton d'accès dans le fragment et non pas dans la chaîne de requête.

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

Octroi de jeton avec paramètre de portée openid

Exemple de demande

GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? response_type=token& client_id=ad398u21ijw3s9w3939& redirect_uri=https://YOUR_APP/redirect_uri& state=STATE& scope=aws.cognito.signin.user.admin+openid+profile

Exemple de réponse

Le serveur d'autorisation procède à la redirection vers votre application avec un jeton d'accès et un jeton d'identification (étant donné que le paramètre scope openid a été inclus).

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

Exemples de réponses négatives

Voici des exemples de réponses négatives :

  • Si client_id et redirect_uri sont valides, mais que les paramètres de demande ne sont pas correctement formatés, le serveur d'authentification redirige l'erreur vers l'URI redirect_uri et ajoute un message d'erreur dans un paramètre d'URL. Par exemple, le problème peut être que la réponse n'inclut pas response_type ou que la réponse fournit code_challenge mais pas code_challenge_method, ou encore que code_challenge_method n'est pas « S256 ».

    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request

  • Si le client demande un « code » ou un « jeton » dans response_type, mais n'est pas autorisé à effectuer ces demandes, le serveur d'autorisation Amazon Cognito renvoie unauthorized_client à l'URI redirect_uri du client, comme suit :

    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=unauthorized_client

  • Si le client demande une portée inconnue, incorrecte ou non valide, le serveur d'autorisation Amazon Cognito renvoie invalid_scope à l'URI redirect_uri du client, comme suit :

    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_scope

  • En cas d'erreur inattendue au niveau du serveur, le serveur d'authentification doit renvoyer server_error à l'URI redirect_uri du client. Étant donné que l'erreur HTTP 500 n'est pas envoyée au client, n'affichez pas cette erreur à l'utilisateur dans le navigateur. L'erreur suivante doit être renvoyée :

    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=server_error

  • Quand Amazon Cognito authentifie par fédération auprès de fournisseurs d'identité tiers, Amazon Cognito peut rencontrer les problèmes de connexion suivants :

    • Si un délai de connexion se produit lors de la demande d'un jeton auprès du fournisseur d'identité, le serveur d'authentification redirige l'erreur vers l'URI redirect_uri du client de la façon suivante :

      HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Timeout+occurred+in+calling+IdP+token+endpoint

    • Si un retard de connexion se produit lors de l'appel du point de terminaison jwks pour la validation du jeton id_token, le serveur d'authentification redirige l'erreur vers l'URI redirect_uri du client comme suit :

      HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=error_description=Timeout+in+calling+jwks+uri

  • Lors de l'authentification par fédération auprès de fournisseurs d'identité tiers, les fournisseurs peuvent renvoyer des réponses d'erreur en raison d'erreurs de configuration ou autres telles que les suivantes :

    • Si une réponse d'erreur est reçue d'autres fournisseurs, le serveur d'authentification redirige l'erreur vers le redirect_uri du client de la façon suivante :

      HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=[IdP name]+Error+-+[status code]+error getting token

    • Si une réponse d'erreur est reçue de Google, le serveur d'authentification redirige l'erreur vers l'URI redirect_uri du client de la façon suivante : HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Google+Error+-+[status code]+[Google provided error code]

  • Quand Amazon Cognito rencontre une exception dans le protocole de communication lors de l'établissement d'une connexion à un fournisseur d'identité externe, le serveur d'authentification redirige l'erreur vers l'URI redirect_uri du client avec l'un des messages suivants :

    • 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