Share via


Utilisation de l’API Hôtel à partir d’un service

L’appel de l’API Hotel nécessite un jeton d’accès, mais l’obtention d’un jeton d’accès nécessite le consentement de l’utilisateur, sauf si vous avez un jeton d’actualisation. Pour obtenir un jeton d’actualisation, vous pouvez écrire une application console simple ou utiliser ce script PowerShell.

$clientId = "your application ID goes here"
 
Start-Process "https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=$clientId&scope=https://ads.microsoft.com/ads.manage%20offline_access&response_type=code&redirect_uri=https://login.microsoftonline.com/common/oauth2/nativeclient"
 
$code = Read-Host "Please enter the code"
 
$response = Invoke-WebRequest https://login.microsoftonline.com/common/oauth2/v2.0/token -ContentType application/x-www-form-urlencoded -Method POST -Body "client_id=$clientid&redirect_uri=https://login.microsoftonline.com/common/oauth2/nativeclient&code=$code&grant_type=authorization_code"
 
Write-Output "Refresh token: " ($response.Content | ConvertFrom-Json).refresh_token 

Avant de pouvoir exécuter le script PowerShell, vous devez suivre ces étapes pour obtenir un ID client.

  1. Accédez à Microsoft Azure - Inscription de l’application, puis cliquez sur Nouvelle inscription.
  2. Entrez un nom d’application tel que Client Hôtels
  3. Pour Types de comptes pris en charge, sélectionnez Comptes dans n’importe quel annuaire organisationnel (n’importe quel annuaire Azure AD - Multilocataire) et comptes Microsoft personnels (par exemple, Skype, Xbox).
  4. Pour URI de redirection, sélectionnez Client public/natif (mobile & bureau), puis définissez l’URI de redirection sur https://login.microsoftonline.com/common/oauth2/nativeclient
  5. Cliquez sur Inscrire et notez votre ID d’application (client)

Ouvrez le Bloc-notes ou votre éditeur favori et copiez le script PowerShell dans l’éditeur. Définissez $clientID sur l’ID d’application que vous avez reçu lors de l’inscription de votre application.

$clientId = "abc123-4d9e-44f1-837d-a7244af50027"

Enregistrez le fichier et nommez-le GetTokens.ps1 (vous pouvez le nommer comme vous le souhaitez, mais l’extension doit être .ps1).

Ouvrez maintenant une fenêtre de console. Pour ouvrir une fenêtre de console sur Microsoft Windows, entrez la commande Exécuter Windows suivante (<bouton> Windows+r) :

cmd.exe

À l’invite de commandes, accédez au dossier dans lequel vous avez enregistré GetTokens.ps1. Ensuite, entrez la commande suivante.

powershell.exe -File .\GetTokens.ps1

Si vous obtenez une erreur de stratégie d’exécution, vous devez modifier votre stratégie d’exécution. Pour connaître les options de stratégie d’exécution, consultez À propos des stratégies d’exécution. Pour modifier la stratégie d’exécution d’une session, entrez la commande suivante :

powershell.exe -ExecutionPolicy Bypass -File .\GetTokens.ps1

Lorsque le script PowerShell s’exécute correctement, il démarre une session de navigateur dans laquelle vous entrez les informations d’identification de votre compte Microsoft (MSA) (les informations d’identification que vous spécifiez doivent avoir accès aux données de votre hôtel). Une fois le consentement donné, la barre d’adresses du navigateur contient le code d’octroi (voir ?code={copy this code}).

https://login.live.com/oauth20_desktop.srf?code=M7ab570e5-a1c0-32e5-a946-e4490c822954&lc=1033

Copiez le code d’octroi (M7ab570e5-a1c0-32e5-a946-e4490c822954) et entrez-le dans la fenêtre de console à l’invite. Le script PowerShell retourne ensuite un jeton d’actualisation. Utilisez le jeton d’actualisation dans votre service pour obtenir le jeton d’accès. Vous devez traiter le jeton d’actualisation comme vous le feriez avec un mot de passe . si quelqu’un en obtient la main, il a accès aux données de votre hôtel.

Le jeton d’actualisation est de longue durée, mais il peut devenir non valide. Si vous recevez une erreur invalid_grant, votre jeton d’actualisation n’est plus valide et vous devrez réexécuter le script PowerShell pour obtenir le consentement et un nouveau jeton d’actualisation.

Maintenant que vous disposez d’un jeton d’actualisation

Avant d’utiliser le jeton d’actualisation, vous devez inscrire votre service pour obtenir un ID client.

  1. Accédez à Microsoft Azure - Inscription de l’application, puis cliquez sur Nouvelle inscription.
  2. Entrez un nom d’application pour votre service
  3. Pour Types de comptes pris en charge, sélectionnez Comptes dans n’importe quel annuaire organisationnel (n’importe quel annuaire Azure AD - Multilocataire) et comptes Microsoft personnels (par exemple, Skype, Xbox).
  4. Fournissez un URI de redirection le cas échéant
  5. Cliquez sur Inscrire et notez l’ID d’application (client) de votre service.

Votre service doit suivre ces étapes de base pour obtenir le jeton d’accès sur lequel vous définissez l’en-tête Authorization.

  • Obtenir le jeton d’actualisation à partir d’un stockage sécurisé
  • Envoyer une requête HTTP POST à https://login.microsoftonline.com/common/oauth2/v2.0/token
    • L’exemple suivant montre le corps du post (les paramètres sont séparés pour la lisibilité) :
      client_id=<yourclientid>
      &grant_type=refresh_token
      &redirect_uri=<urlencodedredirecturifromstep4>
      &refresh_token=<yourrefreshtoken>
  • Obtenir le jeton d’accès, le jeton d’actualisation et l’expiration à partir de la réponse
  • Définir un minuteur qui expire juste avant l’expiration du jeton d’accès
  • Définir l’en-tête Authorization sur le jeton d’accès
  • Stocker le nouveau jeton d’actualisation dans un stockage sécurisé
  • Lorsque le minuteur d’expiration expire, répétez le processus

L’exemple suivant montre un exemple POST utilisant un jeton d’actualisation pour une application de bureau.

POST https://login.microsoftonline.com/common/oauth2/v2.0/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded

client_id=2a6e519f-078e-45a5-9dfc-28d651f7fe96&redirect_uri=https://login.microsoftonline.com/common/oauth2/nativeclient&grant_type=refresh_token&refresh_token=MCRY2sZiCLfI9OJUpW*6I...

Selon votre application cliente, vous devrez peut-être également inclure &client_secret dans votre post.

Vous devez obtenir un nouveau jeton d’accès juste avant l’expiration du jeton actuel. N’obtenez pas de nouveau jeton d’accès pour chaque appel.