Share via


サービスからの Hotel API の使用

Hotel API を呼び出すにはアクセス トークンが必要ですが、アクセス トークンを取得するには、更新トークンがない限りユーザーの同意が必要です。 更新トークンを取得するには、 単純なコンソール アプリを記述 するか、この 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 

PowerShell スクリプトを実行する前に、次の手順に従ってクライアント ID を取得する必要があります。

  1. [Microsoft Azure - アプリの登録] に移動し、[新しい登録] をクリックします。
  2. Hotels クライアントのようなアプリ名を入力します
  3. [サポートされているアカウントの種類] で、[任意の組織のディレクトリ (任意の Azure AD ディレクトリ - マルチテナント)] と個人用 Microsoft アカウント (Skype、Xbox など) を選択します。
  4. [ リダイレクト URI] で、[ パブリック クライアント/ネイティブ (モバイル & デスクトップ)] を選択し、リダイレクト URI を に設定します https://login.microsoftonline.com/common/oauth2/nativeclient
  5. [登録] をクリックし、アプリケーション (クライアント) ID をメモします

メモ帳またはお気に入りのエディターを開き、PowerShell スクリプトをエディターにコピーします。 アプリを登録したときに受け取ったアプリケーション ID に設定 $clientID します。

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

ファイルを保存して GetTokens.ps1 名前を付けます (名前は任意ですが、拡張子は .ps1 する必要があります)。

次に、コンソール ウィンドウを開きます。 Microsoft Windows でコンソール ウィンドウを開くには、次の Windows Run コマンド (<Windows ボタン> + r) を入力します。

cmd.exe

コマンド プロンプトで、GetTokens.ps1 保存したフォルダーに移動します。 次に、次のコマンドを入力します。

powershell.exe -File .\GetTokens.ps1

実行ポリシー エラーが発生した場合は、実行ポリシーを変更する必要があります。 実行ポリシー オプションについては、「 実行ポリシーについて」を参照してください。 セッションの実行ポリシーを変更するには、次のコマンドを入力します。

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

PowerShell スクリプトが正常に実行されると、Microsoft アカウント (MSA) の資格情報を入力するブラウザー セッションが開始されます (指定した資格情報は、ホテルデータにアクセスできる必要があります)。 同意すると、ブラウザーのアドレス バーに許可コードが含まれます (「?code={copy this code}」を参照してください)。

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

許可コード (M7ab570e5-a1c0-32e5-a946-e4490c822954) をコピーし、プロンプトのコンソール ウィンドウに入力します。 その後、PowerShell スクリプトは更新トークンを返します。 サービスで更新トークンを使用して、アクセス トークンを取得します。 更新トークンは、パスワードと同様に扱う必要があります。誰かがそれを手に入れると、ホテルのデータにアクセスできます。

更新トークンは有効期間が長いですが、無効になる可能性があります。 invalid_grant エラーが発生した場合、更新トークンは無効になり、同意と新しい更新トークンを取得するには、PowerShell スクリプトをもう一度実行する必要があります。

これで更新トークンが作成されました

更新トークンを使用する前に、サービスを登録してクライアント ID を取得する必要があります。

  1. [Microsoft Azure - アプリの登録] に移動し、[新しい登録] をクリックします。
  2. サービスのアプリ名を入力します
  3. [サポートされているアカウントの種類] で、[任意の組織のディレクトリ (任意の Azure AD ディレクトリ - マルチテナント)] と個人用 Microsoft アカウント (Skype、Xbox など) を選択します。
  4. 必要に応じてリダイレクト URI を指定します
  5. [登録] をクリックし、サービスのアプリケーション (クライアント) ID をメモします

サービスは、次の基本的な手順に従って、Authorization ヘッダーを に設定したアクセス トークンを取得する必要があります。

  • セキュリティで保護されたストレージから更新トークンを取得する
  • HTTP POST 要求を に送信する https://login.microsoftonline.com/common/oauth2/v2.0/token
    • POST の本文を次に示します (読みやすくするためにパラメーターは区切られます)。
      client_id=<yourclientid>
      &grant_type=refresh_token
      &redirect_uri=<urlencodedredirecturifromstep4>
      &refresh_token=<yourrefreshtoken>
  • 応答からアクセス トークン、更新トークン、有効期限を取得する
  • アクセス トークンの有効期限が切れる直前に期限切れになるタイマーを設定する
  • Authorization ヘッダーをアクセス トークンに設定する
  • セキュリティで保護されたストレージに新しい更新トークンを格納する
  • 有効期限タイマーが期限切れになったら、プロセスを繰り返します

デスクトップ アプリの更新トークンを使用した POST の例を次に示します。

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...

クライアント アプリによっては、POST に含める &client_secret 必要がある場合もあります。

現在のトークンの有効期限が切れる直前に、新しいアクセス トークンのみを取得する必要があります。 呼び出しごとに新しいアクセス トークンを取得しないでください。