開発するデーモン アプリケーションで認証と認可の回復性を向上させる
Microsoft ID プラットフォームと Microsoft Entra ID を使用して、デーモン アプリケーションの回復性を向上させる方法を学習します。 バックグラウンド プロセス、サービス、サーバー間アプリ、ユーザーのいないアプリケーションについて説明します。
「Microsoft ID プラットフォームとは」を参照してください。
次の図は、Microsoft ID プラットフォームを呼び出すデーモン アプリケーションを示しています。
Azure リソースのマネージド ID
Microsoft Azure でデーモン アプリをビルドする場合は、シークレットと資格情報を処理する Azure リソース用マネージド ID を使用します。 この機能を使用すると、証明書の有効期限、ローテーション、または信頼を処理することによって回復性が向上します。
「Azure リソースのマネージド ID とは」をご覧ください
マネージド ID では、Microsoft ID プラットフォームからの有効期間の長いアクセス トークンと情報を使用して、トークンの有効期限が切れる前に新しいトークンを取得します。 アプリは、新しいトークンの取得中に実行されます。
マネージド ID ではリージョン エンドポイントを使用します。これは、サービスの依存関係を統合することでリージョン外エラーを防ぐのに役立ちます。 リージョン エンドポイントでは、地理的な領域でトラフィックを維持することができます。 たとえば、Azure リソースが WestUS2 内にある場合は、すべてのトラフィックが WestUS2 内にとどまります。
Microsoft Authentication Library
デーモン アプリを開発し、マネージド ID を使用しない場合は、認証と認可に Microsoft Authentication Library (MSAL) を使用します。 MSAL を使用すると、クライアント資格情報を提供するプロセスが容易になります。 たとえば、アプリケーションで証明書ベースの資格情報を使用して JSON Web トークン アサーションを作成して署名する必要はありません。
「Microsoft Authentication Library (MSAL) の概要」を参照してください
.NET 開発者向けの Microsoft.Identity.Web
ASP.NET Core でデーモン アプリを開発する場合は、Microsoft.Identity.Web ライブラリを使用して認可を容易にします。 これには、複数のリージョンで実行される分散アプリ向けの分散トークン キャッシュ戦略が含まれています。
詳細情報:
トークンをキャッシュおよび格納する
認証と認可に MSAL を使用しない場合は、トークンのキャッシュと格納に関するベスト プラクティスがあります。 MSAL では、これらのベスト プラクティスを実装して従います。
アプリケーションでは ID プロバイダー (IdP) からトークンを取得して、保護された API を呼び出すことをアプリケーションに認可します。 アプリでトークンを受け取ると、トークンが含まれている応答には、トークンをキャッシュし、再利用する期間をアプリケーションに通知する expires\_in
プロパティが含まれています。 アプリケーションで expires\_in
プロパティを使用してトークンの有効期間を決定していることを確認します。 アプリケーションで API アクセス トークンをデコードしようとしないことを確認します。 キャッシュされたトークンを使用すると、アプリと Microsoft ID プラットフォーム間の不要なトラフィックを防止できます。 ユーザーは、トークンの有効期間中、アプリケーションにサインインしています。
HTTP 429 と 5xx のエラー コード
HTTP 429 と 5xx のエラー コードについては、次のセクションを参照してください
HTTP 429
回復性に影響する HTTP エラーがあります。 アプリケーションで HTTP 429 エラー コード "要求が多すぎます" を受信した場合、Microsoft ID プラットフォームでは要求を抑えていて、アプリでトークンを受信できなくなります。 [再試行までの時間] 応答フィールドの時間が経過するまで、アプリでトークンを取得しようとしないようにします。 429 エラーは、多くの場合、アプリケーションでトークンを正しくキャッシュおよび再利用していないことを示しています。
HTTP 5xx
アプリケーションで HTTP 5x エラー コードを受信した場合、アプリでは高速再試行ループに入ることはできません。 [再試行までの時間] フィールドの期限が切れるまでアプリケーションが待機するようにします。 [再試行後までの時間] ヘッダーがない応答では、応答から 5 秒以上経過した後に最初の再試行で指数バックオフ再試行を使用します。
要求がタイムアウトになったときに、アプリケーションで直ちに再試行しないことを確認します。 前述の指数バックオフ再試行を使用します。