Utilisation des flux d’octroi implicite OAuth 2.0 dans votre portail

Notes

À compter du 12 octobre 2022, le portail Power Apps devient Power Pages. Plus d’informations : Microsoft Power Pages est maintenant généralement disponible (blog)
Nous allons bientôt migrer et fusionner la documentation des portails Power Apps avec la documentation de Power Pages.

Cette fonctionnalité permet à un client de passer des appels côté client aux API externes et de les sécuriser à l’aide de flux d’octroi implicite OAuth. Il fournit un point de terminaison pour obtenir des jetons d’accès sécurisés. Ces jetons d’accès sécurisés qui contiendront les informations d’identité utilisateur à utiliser par des API externes pour l’autorisation selon le flux d’octroi implicite OAuth 2.0. Les informations d’identité d’un utilisateur connecté sont transmises de manière sécurisée aux appels AJAX externes, ce qui aide les développeurs à transmettre le contexte d’authentification et aidera également les utilisateurs à sécuriser leurs API.

Les flux d’octroi implicite OAuth 2.0 prend en charge les points de terminaison de jeton qu’un client peut appeler pour obtenir un jeton d’ID.

Certificats personnalisés

L’utilisation du certificat par défaut pour le flux d’octroi implicite OAuth 2.0 est déconseillée. Vous devrez utiliser un certificat personnalisé lors de l’utilisation du point de terminaison OAuth 2.0. Utilisez le centre d’administration Power Platform pour charger le certificat personnalisé. Après avoir chargé le certificat personnalisé, vous devez mettre à jour les paramètres du site comme ci-dessous :

  1. Accédez à  paramètres du portail  et sélectionnez  Paramètres du site.

  2. Pour créer un paramètre, sélectionnez  Nouveau.

  3. Pour modifier un paramètre existant, sélectionnez Paramètre du site répertorié dans la grille.

  4. Spécifier des valeurs :

    • Nom: CustomCertificates/ImplicitGrantflow
    • Site Web : site Web associé
    • Valeur : Copiez l’empreinte numérique du certificat personnalisé chargé à partir de l’écran Gérer le certificat personnalisé et collez-la ici. La valeur indiquera quel certificat sera utilisé pour le flux d’octroi implicite.
  5. Cliquez sur  Enregistrer et fermer. Menu général pour les nouveaux paramètres du site avec des valeurs spécifiées.

Détails du point de terminaison du jeton

Vous pouvez également obtenir un jeton en faisant une requête Post au point de terminaison /token. L’URL du point de terminaison de jeton est : <portal_url>/_services/auth/token. Le point de terminaison de jeton prend en charge les paramètres suivants :

Paramètre Obligatoire ? Description
client_id Non Chaîne transmise lord d’un appel au point de terminaison d’autorisation. Vous devez vous assurer que l’ID client est enregistré avec le portail. Sinon, une erreur s’affiche. L’ID client est ajouté dans les revendications dans le jeton en tant que paramètre aud et appid et peut être utilisé par les clients pour confirmer que le jeton retourné est pour leur application.
La longueur maximale est de 36 caractères. Seuls les caractères alphanumériques et les traits d’union sont pris en charge.
redirect_uri Non URL du portail où les réponses d’authentification peuvent être envoyées et reçues. Elle doit être enregistrée pour le client_id spécifique utilisé dans l’appel et doit être exactement de la même valeur que celle enregistrée.
state Non Valeur incluse dans la demande qui également renvoyée dans la réponse du jeton. Il peut s’agir d’une chaîne de n’importe quel contenu que vous souhaitez utiliser. En règle générale, une valeur unique généré de manière aléatoire est utilisée pour empêcher une attaque de contrefaçon de demande entre sites.
La longueur maximale est de 20 caractères.
nonce Non Valeur de chaîne envoyée par le client incluse dans le jeton d’ID obtenu tant que revendication. Le client peut ensuite vérifier cette valeur pour corriger les attaques de relecture de jeton. La longueur maximale est de 20 caractères.
response_type Non Ce paramètre prend en charge uniquement token en tant que valeur, ce qui permet à votre application de recevoir immédiatement un jeton d’accès pour le point de terminaison d’autorisation, sans faire une deuxième demande au point de terminaison d’autorisation.

Notes

Bien que les paramètres client_id, redirect_uri, state et nonce soient optionnels, il est recommandé de les utiliser afin de vous assurer que vos intégrations sont sécurisées.

Réponse réussie

Le point de terminaison de jeton renvoie state et expires_in comme en-têtes de réponse, et le jeton dans le corps du formulaire.

Réponse d’erreur

L’erreur dans un point de terminaison de jeton est renvoyée comme document JSON avec les valeurs suivantes :

  • ID erreur : Identificateur unique de l’erreur.
  • Message d’erreur : Message d’erreur spécifique qui peut vous aider à identifier la cause principale d’une erreur d’authentification.
  • ID de corrélation : GUID utilisé pour le débogage. Si vous avez activé la journalisation diagnostique, l’ID de corrélation sera présent dans les journaux d’erreurs de serveur.
  • Horodatage : Date et heure auxquelles l’erreur est générée.

Le message d’erreur s’affiche dans la langue par défaut de l’utilisateur connecté. Si l’utilisateur n’est pas connecté, une page de connexion est affichée pour que l’utilisateur se connecte. Par exemple, une réponse d’erreur ressemble à ce qui suit :

{"ErrorId": "PortalSTS0001", "ErrorMessage": "Client Id provided in the request is not a valid client Id registered for this portal. Please check the parameter and try again.", "Timestamp": "4/5/2019 10:02:11 AM", "CorrelationId": "7464eb01-71ab-44bc-93a1-f221479be847" }

Autoriser les détails du point de terminaison

Notes

Le point de terminaison d’autoristion est déconseillé. Utilisez la requête POST du jeton point de terminaison pour obtenir le jeton d’identification.]

L’URL pour autoriser le point de terminaison est : <portal_url>/_services/auth/authorize. Le point de terminaison d’autorisation prend en charge les paramètres suivants :

Paramètre Obligatoire ? Description
client_id Oui Chaîne transmise lord d’un appel au point de terminaison d’autorisation. Vous devez vous assurer que l’ID client est enregistré avec le portail. Sinon, une erreur s’affiche. L’ID client est ajouté dans les revendications dans le jeton en tant que paramètre aud et appid et peut être utilisé par les clients pour confirmer que le jeton retourné est pour leur application.
La longueur maximale est de 36 caractères. Seuls les caractères alphanumériques et les traits d’union sont pris en charge.
redirect_uri Oui URL du portail où les réponses d’authentification peuvent être envoyées et reçues. Elle doit être enregistrée pour le client_id spécifique utilisé dans l’appel et doit être exactement de la même valeur que celle enregistrée.
state Non Valeur incluse dans la demande qui également renvoyée dans la réponse du jeton. Il peut s’agir d’une chaîne de n’importe quel contenu que vous souhaitez utiliser. En règle générale, une valeur unique généré de manière aléatoire est utilisée pour empêcher une attaque de contrefaçon de demande entre sites.
La longueur maximale est de 20 caractères.
nonce Non Valeur de chaîne envoyée par le client incluse dans le jeton d’ID obtenu tant que revendication. Le client peut ensuite vérifier cette valeur pour corriger les attaques de relecture de jeton. La longueur maximale est de 20 caractères.
response_type Non Ce paramètre prend en charge uniquement token en tant que valeur, ce qui permet à votre application de recevoir immédiatement un jeton d’accès pour le point de terminaison d’autorisation, sans faire une deuxième demande au point de terminaison d’autorisation.

Réponse réussie

Le point de terminaison d’autorisation retourne les valeurs suivantes dans l’URL de réponse n tant que fragment :

  • jeton : Le jeton a renvoyé comme jeton web JSON (JWT) numériquement signé par la clé privée du portail.
  • état : Si un paramètre d’état est inclus dans la demande, la même valeur doit apparaître dans la réponse. L’application doit contrôler que les valeurs d’état dans la demande et la réponse sont identiques.
  • expires_in : Durée de validité du jeton d’accès (en secondes).

Par exemple, une réponse réussie ressemble à ce qui suit :

GET https://aadb2cplayground.azurewebsites.net/#token=eyJ0eXAiOiJKV1QiLCJhbGciOI1NisIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q&expires_in=3599&state=arbitrary_data_you_sent_earlier

Réponse d’erreur

L’erreur dans un point de terminaison d’autorisation est renvoyée comme document JSON avec les valeurs suivantes :

  • ID erreur : Identificateur unique de l’erreur.
  • Message d’erreur : Message d’erreur spécifique qui peut vous aider à identifier la cause principale d’une erreur d’authentification.
  • ID de corrélation : GUID utilisé pour le débogage. Si vous avez activé la journalisation diagnostique, l’ID de corrélation sera présent dans les journaux d’erreurs de serveur.
  • Horodatage : Date et heure auxquelles l’erreur est générée.

Le message d’erreur s’affiche dans la langue par défaut de l’utilisateur connecté. Si l’utilisateur n’est pas connecté, la page de connexion est affichée pour que l’utilisateur se connecte. Par exemple, une réponse d’erreur ressemble à ce qui suit :

{"ErrorId": "PortalSTS0001", "ErrorMessage": "Client Id provided in the request is not a valid client Id registered for this portal. Please check the parameter and try again.", "Timestamp": "4/5/2019 10:02:11 AM", "CorrelationId": "7464eb01-71ab-44bc-93a1-f221479be847" }

Valider le jeton d’ID

Obtenir un jeton d’ID uniquement n’est pas suffisant pour authentifier l’utilisateur ; vous devez également valider la signature du jeton et vérifier les revendications dans le jeton selon les besoins de votre application. Le point de terminaison de jeton public fournit la clé publique du portail, qui peut être utilisée pour valider la signature du jeton fournie par le portail. L’URL du point de terminaison de jeton public est : <portal_url>/_services/auth/publickey.

Activer ou désactiver le flux d’octroi implicite

Par défaut, le flux d’octroi implicite est activé. Si vous souhaitez désactiver le flux d’octroi implicite, définissez la valeur du paramètre du site Connector/ImplicitGrantFlowEnabled sur False.

Si ce paramètre de site n’est pas disponible dans votre portail, vous devez créer un paramètre de site avec la valeur appropriée.

Configurer la validité du jeton

Par défaut, le jeton est valide pendant 15 minutes. Si vous souhaitez modifier la validité du jeton, définissez le paramètre du site ImplicitGrantFlow/TokenExpirationTime sur la valeur requise. La valeur doit être spécifiée en secondes. La valeur maximale peut être de 1 heure, et la valeur minimale doit être de 1 minute. Si une valeur incorrecte est spécifiée (par exemple, des caractères alphanumériques), la valeur par défaut de 15 minutes est utilisée. Si vous définissez une valeur supérieure à la valeur maximale ou inférieure à la valeur minimale, les maximale et minimale sont utilisées, respectivement, par défaut.

Par exemple, pour définir la validité du jeton sur 30 minutes, définissez le paramètre du site ImplicitGrantFlow/TokenExpirationTime sur 1800. Pour définir la validité du jeton sur 1 heure, définissez la valeur du paramètre du site ImplicitGrantFlow/TokenExpirationTime sur 3600.

Enregistrer l’ID client pour le flux d’octroi implicite

Vous devez enregistrer l’ID client avec le portail pour lequel ce flux est autorisé. Pour enregistrer un ID client, vous devez créer les paramètres de site suivants :

Paramètre du site Value
ImplicitGrantFlow/RegisteredClientId Valeurs d’ID client valides autorisées pour ce portail. Les valeurs doivent être séparées par un point-virgule et peuvent contenir des caractères alphanumériques et des traits d’union. La longueur maximale est de 36 caractères.
ImplicitGrantFlow/{ClientId}/RedirectUri URI de redirection valides autorisées pour un ID client spécifique. Les valeurs doivent être séparées par un point-virgule. L’URL fournie doit être une page web valide du portail.

Exemple de code

Vous pouvez utiliser l’exemple de code suivant pour démarrer l’utilisation de l’octroi implicite OAuth 2.0 avec les API des portails Power Apps.

Utilisez le jeton OAuth de portail avec une API web externe

Cet exemple est un projet basé sur ASP.NET et est utilisé pour valider le jeton d’ID émis par les portails Power Apps. L’exemple complet se trouve ici : Utiliser le jeton OAuth de portail avec une API web externe.

Exemple de point de terminaison de jeton

Cet exemple illustre comment utiliser la fonction getAuthenticationToken pour extraire un jeton d’ID à l’aide du point de terminaison du jeton sur les portails Power Apps. L’exemple se trouve ici : Exemple de point de terminaison de jeton.

Notes

Pouvez-vous nous indiquer vos préférences de langue pour la documentation ? Répondez à un court questionnaire. (veuillez noter que ce questionnaire est en anglais)

Le questionnaire vous prendra environ sept minutes. Aucune donnée personnelle n’est collectée (déclaration de confidentialité).