この記事では、Azure App Service で組み込みの認証と承認のための OAuth トークンを管理する方法について説明します。
アプリ コードでのトークンの取得
Azure App Service は、プロバイダー固有のトークンを要求ヘッダーに挿入して、簡単にアクセスできるようにします。 プロバイダー固有のトークンを取得するには、アプリに対して トークン ストア を有効にする必要があります。
モバイル アプリやブラウザー内の JavaScript など、クライアント コードから/.auth/me
に HTTP GET
要求を送信します。 返される JSON にはプロバイダー固有のトークンがあります。
注
アクセス トークンはプロバイダー リソースにアクセスするためのものであるため、クライアント シークレットを使用してプロバイダーを構成した場合にのみ存在します。
次の表に、いくつかの App Service 組み込みプロバイダーの OAuth トークン ヘッダー名を示します。
プロバイダー | ヘッダー名 |
---|---|
Microsoft Entra | X-MS-TOKEN-AAD-ID-TOKEN X-MS-TOKEN-AAD-ACCESS-TOKEN X-MS-TOKEN-AAD-EXPIRES-ON X-MS-TOKEN-AAD-REFRESH-TOKEN |
フェイスブック | X-MS-TOKEN-FACEBOOK-ACCESS-TOKEN X-MS-TOKEN-FACEBOOK-EXPIRES-ON |
グーグル | X-MS-TOKEN-GOOGLE-ID-TOKEN X-MS-TOKEN-GOOGLE-ACCESS-TOKEN X-MS-TOKEN-GOOGLE-EXPIRES-ON X-MS-TOKEN-GOOGLE-REFRESH-TOKEN |
x | X-MS-TOKEN-TWITTER-ACCESS-TOKEN X-MS-TOKEN-TWITTER-ACCESS-TOKEN-SECRET |
注
これらのヘッダーは、異なる言語フレームワークでは異なる形式 (小文字や先頭文字が大文字など) でアプリ コードに提供される可能性があります。
認証トークンを更新する
次の情報は、プロバイダー トークンを参照します。 セッション トークンについては、「 セッション トークンの有効期限の猶予期間を延長する」を参照してください。
プロバイダーのアクセス トークンの有効期限が切れた場合は、そのトークンをもう一度使用する前に、ユーザーを再認証する必要があります。 アプリケーションの GET
エンドポイントに /.auth/refresh
呼び出しを行って、トークンの期限切れを回避することができます。
アクセス トークンをいつでも更新するには、任意の言語で /.auth/refresh
を呼び出します。 次のスニペットでは、jQuery を使用して、JavaScript クライアントからアクセス トークンを更新します。
function refreshTokens() {
let refreshUrl = "/.auth/refresh";
$.ajax(refreshUrl) .done(function() {
console.log("Token refresh completed successfully.");
}) .fail(function() {
console.log("Token refresh failed. See application logs for details.");
});
}
呼び出されると、App Service は認証されたユーザーのトークン ストア内のアクセス トークンを自動的に更新します。 トークンに対する後続の要求は、更新されたトークンを取得します。 更新トークンとトークンの有効期限を確認するには、「 アプリ コードでトークンを取得する」に記載されているヘッダーを使用します。
注
ユーザーがアプリに付与したアクセス許可を取り消すと、 /.auth/me
の呼び出しが 403 Forbidden
応答で失敗する可能性があります。 エラーを診断するには、アプリケーション ログで詳細を確認します。
更新トークンを提供するようにプロバイダーを構成する
トークンの更新を機能させるには、トークン ストアにプロバイダーからの 更新トークンが 含まれている必要があります。 各プロバイダーは、更新トークンを取得する方法について説明します。 次の表に、簡単な概要を示します。
プロバイダー | 更新トークン |
---|---|
マイクロソフト | 「更新トークンを提供するように Microsoft Entra プロバイダーを構成する」の手順に従います。 |
フェイスブック | 更新トークンは提供されません。 有効期間が長いトークンの有効期限は 60 日です。 詳細については、「 Long-Lived アクセス トークン」を参照してください。 |
グーグル |
access_type=offline クエリ文字列パラメーターを /.auth/login/google API 呼び出しに追加します。 詳しくは、Google の更新トークンに関する記事をご覧ください。 |
x | アクセス トークンは期限切れになりません。 詳細については、OAuth に関する FAQ を参照してください。 |
更新トークンを提供するように Microsoft Entra プロバイダーを構成する
- Azure portal で API Playground (プレビュー) に移動し、必要に応じて [新しい要求 ] を選択します。
- [ API バージョンを含む ARM 相対パスの入力 ] フィールドに、次の文字列を入力し、プレースホルダーをサブスクリプション ID、リソース グループ名、アプリ名に置き換えます。
subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Web/sites/<app-name>/config/authsettingsV2?api-version=2024-11-01
- [実行] を選択します。
- 左上の
PUT
を選択し、[ 要求本文 ] タブを選択します。 - [応答本文] フィールドから
GET
応答の内容をコピーし、[要求本文] タブに貼り付けます。 - コードで、
"identityProviders":
>"azureActiveDirectory":
>"login":
セクションを見つけて、次の行を追加します。"loginParameters": ["scope=openid profile email offline_access"]
- [実行] を選択します。 [応答本文] フィールドに変更内容が表示されます。
Offline_access は、更新トークンを提供するスコープです。 App Service では、既定で他のスコープが既に要求されています。 詳細については、「 OpenID Connect スコープ と Web Apps - Update Auth Settings V2」を参照してください。
セッション トークンの有効期限の猶予期間の延長
認証されたセッションは 8 時間後に期限切れになり、72 時間の既定の猶予期間が続きます。 この猶予期間内に、ユーザーを再認証することなく、App Service でセッション トークンを更新できます。 セッション トークンが無効になったときに /.auth/refresh
を呼び出すだけで、トークンの有効期限を自分で追跡する必要はありません。
72 時間の猶予期間が経過すると、ユーザーはもう一度サインインして有効なセッション トークンを取得する必要があります。 72 時間より長い有効期限が必要な場合は延長できますが、認証トークンが漏洩または盗難された場合、有効期限を長期間延長すると、セキュリティに大きな影響を与える可能性があります。 設定は既定の 72 時間のままにするか、延長期間を可能な限り小さい値に設定することをお勧めします。
既定の有効期限ウィンドウを拡張するには、 Azure Cloud Shell で次の Azure CLI コマンドを実行します。
az webapp auth update --resource-group <group_name> --name <app_name> --token-refresh-extension-hours <hours>
注
猶予期間は App Service 認証セッションにのみ適用され、ID プロバイダーからのアクセス トークンには適用されません。 有効期限が切れたプロバイダー トークンの猶予期間はありません。