Table of Contents

Application Web Implicit (Obsolète) sur la plateforme d’identité Mozaïk

Les applications web auxquelles l’utilisateur accède par le biais d’un navigateur doivent disposer d’un moyen d’accès aux profils utilisateurs et aux ressources protégées, comme les API Web. Ces applications peuvent utiliser le flux OpenID Connect - Implicit Flow pour récupérer un jeton d’identité et optionnellement un jeton d’accès lors de la connexion de l’utilisateur.

Avertissement

Pour obtenir un jeton d’accès, il est maintenant recommandé pour toutes les applications basées sur le navigateur d’utiliser le flux OpenID Connect - Authorization Code Flow avec PKCE tel que décrit dans le scénario d’Application native & Basée sur le navigateur. Vous pouvez consulter les articles ci-dessous pour plus d’informations :

Récupération des métadonnées OpenID Connect

Le document de métadonnées OpenID Connect Discovery 1.0 contient la plupart des informations nécessaires à une application pour effectuer la connexion. Cela inclut des informations telles que les URL à utiliser et l’emplacement des clés de signature publiques du service. Pour accéder à ce document, envoyez une requête GET au point de terminaison /.well-known/openid-configuration :

GET /{tenant_id}/.well-known/openid-configuration HTTP/1.1
Host: mozaikacces.ca
Paramètre Condition Description
tenant_id Facultatif L’identifiant de l’organisation ayant accordé à votre application les autorisations demandées. L’identifiant de l’organisation propriétaire de l’application est utilisé par défaut.
Astuce

Essayez! Cliquez sur https://mozaikacces.ca/.well-known/openid-configuration pour voir la configuration.

Exemple de réponse

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
   "authorization_endpoint": "https://mozaikacces.ca/connect/authorize",
   "end_session_endpoint": "https://mozaikacces.ca/connect/endsession",
   "issuer": "https://mozaikacces.ca",
   "jwks_uri": "https://mozaikacces.ca/.well-known/openid-configuration/jwks",
   "token_endpoint": "https://mozaikacces.ca/connect/token",
   "token_endpoint_auth_methods_supported": [
      "client_secret_basic",
      "client_secret_post"
   ],
   "userinfo_endpoint": "https://mozaikacces.ca/connect/userinfo"
   ...
}

Envoi d’une requête de connexion

Lorsque votre application web a besoin d’authentifier l’utilisateur, elle peut le diriger vers le point de terminaison /authorize :

Les sauts de ligne sont pour la lisibilité seulement.

GET /{tenant_id}/connect/authorize?
client_id=4de54d7b-cc83-4ad1-ac97-3a0c94288a10
&redirect_uri=https%3A%2F%2Flocalhost%2Fapp%2F
&response_type=id_token%20token
&response_mode=form_post
&scope=openid
&state=12345
&nonce=678910
HTTP/1.1
Host: mozaikacces.ca
Paramètre Condition Description
tenant_id Facultatif L’identifiant de l’organisation ayant accordé à votre application les autorisations demandées. L’identifiant de l’organisation propriétaire de l’application est utilisé par défaut.
À noter que si vous obtenez un jeton en passant un tenant id sur la route, vous devrez procéder ainsi pour les autres types de requêtes ({tenant_id}/connect/token, {tenant_id}/connect/userinfo, etc.)
client_id Obligatoire L’identifiant client attribué à votre application par l’environnement Espace API.
redirect_uri Obligatoire L’URI de redirection où vous souhaitez que la réponse soit envoyée pour être gérée par votre application. Il doit correspondre exactement à l’un des URI de redirection que vous avez inscrits dans l’environnement Espace API.
scope Obligatoire L’ensemble des autorisations demandées par l’application séparées par des espaces. Cela peut inclure les portées OpenID Connect (openid, profile, email). La valeur doit correspondre à des portées que vous avez inscrites dans l’environnement Espace API. Les noms des portées sont sensibles à la casse.
response_type Obligatoire Le type de réponse à envoyer à votre application. La valeur doit inclure id_token pour le flux OpenID Connect - Implicit Flow. Elle peut également inclure la valeur token pour permettre à votre application de recevoir immédiatement un jeton d’accès à partir du point de terminaison /authorize sans avoir à exécuter une deuxième requête sur le point de terminaison /token.
response_mode Recommandé La méthode utilisée pour envoyer la réponse de la connexion à votre application. Les valeurs possibles sont form_post ou fragment. Pour les applications web, nous vous recommandons d’utiliser la valeur form_post pour garantir le transfert le plus sécurisé des jetons à votre application. La valeur par défaut est fragment.
nonce Obligatoire Une valeur incluse dans la requête, générée par l’application, qui sera intégrée dans la valeur id_token résultante en tant que revendication. L’application peut vérifier cette valeur afin de contrer les attaques par relecture de jetons. La valeur est généralement une valeur unique, aléatoire pouvant être utilisée pour identifier l’origine de la requête.
state Recommandé Une valeur incluse dans la requête, qui sera également renvoyée dans la réponse. Il peut s’agir d’une valeur de votre choix. Une valeur unique générée de manière aléatoire est généralement utilisée pour empêcher les falsifications de requête intersite. La valeur d’état est également utilisée pour coder les informations sur l’état de l’utilisateur dans l’application avant la requête d’authentification, comme la page ou l’écran sur lequel ou laquelle il était positionné.
prompt Facultatif Le type d’interaction utilisateur requis. Les valeurs valides sont login, none et consent. La valeur login oblige l’utilisateur à saisir ses informations d’identification lors de cette requête, annulant de fait l’authentification unique. La valeur none a l’effet inverse. Cette valeur garantit qu’aucune invite interactive n’est présentée à l’utilisateur. Si la requête ne peut pas être exécutée en mode silencieux au moyen d’une authentification unique, le point de terminaison de la plateforme d’identité Mozaïk renvoie une erreur. La valeur consent déclenche l’affichage de la fenêtre de consentement une fois que l’utilisateur se connecte. La fenêtre invite l’utilisateur à accorder des autorisations à l’application.
login_hint Facultatif Le courriel utilisé pour remplir au préalable le champ réservé de la page de connexion de l’utilisateur dans le cas où vous le connaissez déjà. Les applications utilisent souvent ce paramètre au cours de la réauthentification, après avoir extrait le courriel à partir de la revendication email du jeton d’identité lors d’une connexion précédente.
ui_locales Facultatif Les langues de préférence utilisées pour l’affichage de l’interface utilisateur dans la page de connexion. Les langues doivent être séparées par des espaces comme dans cet exemple: fr-CA fr en.
max_age Facultatif La durée de vie maximale (en secondes) de la session utilisateur. Dépasser cette valeur, l’utilisateur sera obligé de saisir ses informations d’identification.
acr_values Facultatif Les informations additionnelles en lien avec la connexion séparées par des espaces comme dans cet exemple: idp:Microsoft info1:exemple. La valeur actuellement possible est idp:nom. Elle permet de passer outre la page de connexion de la plateforme d’identité Mozaïk pour rediriger l’utilisateur directement au fournisseur d’identité externe sélectionné. Les applications peuvent utiliser ce paramètre au cours de la réauthentification, après avoir extrait le fournisseur d’identité externe de la revendication idp du jeton d’identité lors d’une connexion précédente.

À ce stade, l’utilisateur est invité à saisir ses informations d’identification et à exécuter l’authentification. Le point de terminaison de la plateforme d’identité Mozaïk vérifie que l’utilisateur a accepté les autorisations indiquées dans le paramètre de requête scope. Si l’utilisateur n’a pas accepté l’une ou plusieurs de ces autorisations, le point de terminaison de la plateforme d’identités Mozaïk lui demande de corriger ce manquement. Vous pouvez en savoir plus sur l’expérience du consentement de l’application.

Une fois que l’utilisateur a procédé à l’authentification et accordé son consentement, le point de terminaison de la plateforme d’identité Mozaïk renvoie une réponse à votre application au paramètre redirect_uri, à l’aide de la méthode spécifiée dans le paramètre response_mode.

Réponse réussie

Une réponse réussie lorsque vous utilisez response_type=id_token token et response_mode=form_post ressemble à ceci :

POST /app/ HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded

id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNBVGZNNXBP...
&access_token=NzUzODkyYzAtNGExOC00NGI0LWE5MzAtMjkyYWU3MzlkM2I5
&expires_in=3599
&token_type=Bearer
&scope=openid
&state=12345
&session_state=cPE4fNG93-elYcRBpmAznF0SsKaZByYf9dxYl...
Paramètre Description
id_token Le jeton d’identité demandé. L’application peut décoder les segments de ce jeton, afin de demander des informations relatives à l’utilisateur qui s’est connecté. L’application peut mettre en cache les valeurs et les afficher, mais elle ne peut pas les utiliser pour les limites d’autorisation ou de sécurité. Inclus si scope inclut openid.
access_token Le jetons d’accès demandé. L’application peut utiliser ce jeton pour procéder à l’authentification sur la ressource sécurisée, par exemple une API Web. Le jeton d’accès ne doit pas être décodé ou inspecté, il doit être traité comme une valeur opaque. Inclus si response_type inclut token.
expires_in La durée de validité du jeton d’accès (en secondes). Inclus si response_type inclut token.
token_type Le type de jeton d’accès. Le seul type pris en charge par la plateforme d’identité Mozaïk est Bearer. Inclus si response_type inclut token.
scope L’ensemble des autorisations accordé à votre application séparées par des espaces.
state L’application doit vérifier que les valeurs d’état de la requête et de la réponse sont identiques. Inclus si state inclut dans la requête initiale.
session_state La valeur de l’état de la session utilisateur. Ce paramètre doit être traité comme une valeur opaque. Inclus si scope inclut openid. Pour plus d’informations, consultez la spécification OpenID Connect Session Management 1.0 - draft 30.

Réponse d’erreur

Les réponses d’erreur peuvent également être envoyées au paramètre redirect_uri, de manière à ce que l’application puisse les traiter. Une réponse d’erreur lorsque vous utilisez response_mode=form_post ressemble à ceci :

Les sauts de ligne sont pour la lisibilité seulement.

POST /app/ HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded

error=access_denied
&The+resource+owner+or+authorization+server+denied+the+request
&session_state=cPE4fNG93-elYcRBpmAznF0SsKaZByYf9dxYl...
Paramètre Description
error Un code d’erreur que vous pouvez utiliser pour classer les types d’erreurs se produisant et intervenir face aux erreurs.
error_description Un message d’erreur spécifique qui peut vous aider à identifier la cause principale d’une erreur d’authentification.
session_state La valeur de l’état de la session utilisateur. Ce paramètre doit être traité comme une valeur opaque. Inclus si scope inclut openid. Pour plus d’informations, consultez la spécification OpenID Connect Session Management 1.0 - draft 30.

Validation de la réponse

La seule réception du jeton d’identité ne suffit pas à authentifier l’utilisateur. Vous devrez valider la réponse et les jetons selon les directives de OIDC Implicit Flow - Authentication Response Validation.

Utilisation d’un jeton d’accès

Maintenant que vous avez acquis un jeton d’accès, utilisez-le pour effectuer des demandes auprès de la ressource. Une requête ressemble à ceci :

GET {tenant_id}/connect/userinfo HTTP/1.1
Host: https://mozaikacces.ca
Authorization: Bearer NzUzODkyYzAtNGExOC00NGI0LWE5MzAtMjkyYWU3MzlkM2I5

Actualisation des jetons

Le flux OpenID Connect - Implicit Flow ne fournit pas de jeton d’actualisation. Les jetons d’identité et d’accès expirant après une courte période, votre application doit être préparée à les actualiser de manière régulière. Pour actualiser chaque type de jeton, vous pouvez envoyer une requête de connexion dans une fenêtre de type iFrame masquée à l’aide du paramètre prompt=none afin de contrôler le comportement de la plateforme d’identité Mozaïk. La réponse d’erreur contient le code d’erreur login_required lorsqu’une interaction utilisateur est requise.

Envoi d’une requête de déconnexion

Le point de terminaison endsession décrit dans OpenID Connect RP-Initiated Logout 1.0 - draft 01 permet à votre application d’envoyer une requête pour mettre fin à la session d’un utilisateur et effacer les cookies définis par le point de terminaison de la plateforme d’identité Mozaïk. Pour déconnecter complètement un utilisateur d’une application web, votre application doit mettre fin à sa propre session avec l’utilisateur (généralement en vidant un cache de jeton ou en supprimant les cookies), puis le rediriger vers le point de terminaison /endsession :

Les sauts de ligne sont pour la lisibilité seulement.

GET /{tenant_id}/connect/endsession?
id_token_hint=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNBVGZNNXBP...
&post_logout_redirect_uri=https%3A%2F%2Flocalhost%2Fapp%2F
HTTP/1.1
Host: mozaikacces.ca
Paramètre Condition Description
tenant_id Facultatif L’identifiant de l’organisation ayant accordé à votre application les autorisations demandées. L’identifiant de l’organisation propriétaire de l’application est utilisé par défaut.
id_token_hint Facultatif Le jeton d’identité demandé lors de la requête de connexion. S’il n’est pas inclus, le point de terminaison de la plateforme d’identité Mozaïk demande une confirmation de déconnexion à l’utilisateur.
post_logout_redirect_uri Facultatif L’URI de redirection après déconnexion où vous souhaitez que la réponse soit envoyée pour être gérée par votre application. Il doit correspondre exactement à l’un des URI de redirection après déconnexion que vous avez inscrits dans l’environnement Espace API. S’il n’est pas inclus, le point de terminaison de la plateforme d’identité Mozaïk affiche un message générique de déconnexion. Un id_token_hint est requis pour exécuter la redirection.
state Facultatif Une valeur incluse dans la requête, qui sera également renvoyée dans la réponse. Il peut s’agir d’une valeur de votre choix. Une valeur unique générée de manière aléatoire est généralement utilisée pour empêcher les falsifications de requête intersite. La valeur d’état est également utilisée pour coder les informations sur l’état de l’utilisateur dans l’application avant la requête d’authentification, comme la page ou l’écran sur lequel ou laquelle il était positionné.

Déconnexion unique

Lorsque vous redirigez l’utilisateur vers le point de terminaison endsession de la plateforme d’identité Mozaïk, la session de l’utilisateur est effacée du navigateur. Toutefois, l’utilisateur peut rester connecté à d’autres applications qui utilisent des comptes Mozaïk pour s’authentifier. Pour permettre à ces applications de déconnecter simultanément l’utilisateur, le point de terminaison de la plateforme d’identité Mozaïk envoie une requête GET aux URI de déconnexion inscrits dans l’environnement Espace API pour toutes les applications auxquelles l’utilisateur est actuellement connecté. Les applications doivent répondre à cette requête en effaçant toute session qui identifie l’utilisateur et en renvoyant une réponse avec un code HTTP 200. Si vous souhaitez prendre en charge la déconnexion unique dans votre application, vous devez implémenter le paramètre frontchannel_logout_uri dans le code de votre application tel que décrit dans OpenID Connect Front-Channel Logout 1.0 - draft 04.