サービスからの 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 を取得する必要があります。
- [Microsoft Azure - アプリの登録] に移動し、[新しい登録] をクリックします。
- Hotels クライアントのようなアプリ名を入力します
- [サポートされているアカウントの種類] で、[任意の組織のディレクトリ (任意の Azure AD ディレクトリ - マルチテナント)] と個人用 Microsoft アカウント (Skype、Xbox など) を選択します。
- [ リダイレクト URI] で、[ パブリック クライアント/ネイティブ (モバイル & デスクトップ)] を選択し、リダイレクト URI を に設定します https://login.microsoftonline.com/common/oauth2/nativeclient
- [登録] をクリックし、アプリケーション (クライアント) 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 を取得する必要があります。
- [Microsoft Azure - アプリの登録] に移動し、[新しい登録] をクリックします。
- サービスのアプリ名を入力します
- [サポートされているアカウントの種類] で、[任意の組織のディレクトリ (任意の Azure AD ディレクトリ - マルチテナント)] と個人用 Microsoft アカウント (Skype、Xbox など) を選択します。
- 必要に応じてリダイレクト URI を指定します
- [登録] をクリックし、サービスのアプリケーション (クライアント) 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>
- POST の本文を次に示します (読みやすくするためにパラメーターは区切られます)。
- 応答からアクセス トークン、更新トークン、有効期限を取得する
- アクセス トークンの有効期限が切れる直前に期限切れになるタイマーを設定する
- 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
必要がある場合もあります。
現在のトークンの有効期限が切れる直前に、新しいアクセス トークンのみを取得する必要があります。 呼び出しごとに新しいアクセス トークンを取得しないでください。