次の方法で共有


Azure App Service で OAuth トークンを管理する

この記事では、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 プロバイダーを構成する

  1. Azure portal で API Playground (プレビュー) に移動し、必要に応じて [新しい要求 ] を選択します。
  2. [ API バージョンを含む ARM 相対パスの入力 ] フィールドに、次の文字列を入力し、プレースホルダーをサブスクリプション ID、リソース グループ名、アプリ名に置き換えます。
    subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Web/sites/<app-name>/config/authsettingsV2?api-version=2024-11-01
  3. [実行] を選択します。
  4. 左上の PUT を選択し、[ 要求本文 ] タブを選択します。
  5. [応答本文] フィールドからGET応答の内容をコピーし、[要求本文] タブに貼り付けます。
  6. コードで、 "identityProviders":>"azureActiveDirectory":>"login": セクションを見つけて、次の行を追加します。
    "loginParameters": ["scope=openid profile email offline_access"]
  7. [実行] を選択します。 [応答本文] フィールドに変更内容が表示されます。

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 プロバイダーからのアクセス トークンには適用されません。 有効期限が切れたプロバイダー トークンの猶予期間はありません。