App Service の認証と承認について詳しく知る
Azure App Service によって、組み込みの認証と承認がサポートされます。 Web アプリ、RESTful API、モバイル バック エンド、Azure Functions において、最小限のコード記述、またはコードなしでユーザーをサインインしてデータにアクセスすることができます。
組み込みの認証を使用する理由
認証と承認に App Service を必ず使う必要はありません。 多くの Web フレームワークにセキュリティ機能がバンドルされており、必要に応じてそれらを使うことができます。 App Service 以上に高い柔軟性が必要な場合は、独自のユーティリティを記述することもできます。
App Service と Azure Functions 用の組み込みの認証機能では、すぐに使用できる認証をフェデレーション ID プロバイダーに提供することで、時間と労力を節約できます。これにより、アプリケーションの残りの部分に専念できます。
- Azure App Service では、独自に実装せず、さまざまな認証機能を Web アプリまたは API に統合できます。
- 認証はプラットフォームに直接組み込まれており、特定の言語、SDK、セキュリティの専門知識、コードはどれも必要ありません。
- 複数のログイン プロバイダーを統合できます。 たとえば、Microsoft Entra ID、Facebook、Google、X などです。
ID プロバイダー
App Service が使用するフェデレーション ID では、サード パーティの ID プロバイダーが代わりにユーザー ID と認証フローを管理します。 次の ID プロバイダーを既定で利用できます。
プロバイダー | サインイン エンドポイント | 使用方法に関するガイダンス |
---|---|---|
Microsoft ID プラットフォーム | /.auth/login/aad |
App Service Microsoft ID プラットフォーム ログイン |
/.auth/login/facebook |
App Service Facebook ログイン | |
/.auth/login/google |
App Service Google ログイン | |
x | /.auth/login/twitter |
App Service X ログイン |
OpenID Connect プロバイダー | /.auth/login/<providerName> |
App Service OpenID Connect ログイン |
GitHub | /.auth/login/github |
App Service GitHub ログイン |
これらのプロバイダーのいずれかで認証と認可を有効にすると、そのプロバイダーのサインイン エンドポイントが、ユーザー認証と、プロバイダーからの認証トークンの検証に使用できるようになります。 任意の数のサインイン オプションを、ユーザーに対して提供できます。
しくみ
認証と承認のモジュールは、アプリケーションのコードと同じサンドボックスで実行します。 有効にすると、すべての受信 HTTP 要求がアプリケーション コードに渡される前にこれを通過するようになります。 このモジュールは、アプリのためにいくつかの処理を行います。
- 特定の ID プロバイダーを使用してユーザーとクライアントを認証する
- 構成済みの ID プロバイダーによって発行された OAuth トークンの検証、保存、更新を行う
- 認証されたセッションを管理します
- HTTP 要求ヘッダーに ID 情報を挿入する
このモジュールは、アプリケーション コードとは別に実行され、Azure Resource Manager の設定または構成ファイルを使用して構成できます。 SDK、特定のプログラミング言語、またはアプリケーション コードの変更は必要ありません。
注意
Linux コンテナーでは、認証と承認のモジュールは、アプリケーションのコードから分離された別のコンテナーで実行されます。 インプロセスでは実行されないため、特定の言語フレームワークと直接統合することはできません。
Authentication flow
認証フローは、プロバイダーによる違いはありませんが、プロバイダーの SDK でサインインするかどうかによって異なります。
プロバイダーの SDK を使用しない場合: アプリケーションは、フェデレーション サインインを App Service に委任します。 この委任は通常、ブラウザー アプリで使用され、プロバイダーのログイン ページをユーザーに表示できます。 このサーバー コードはサインイン プロセスを管理し、"サーバー主導フロー" や "サーバー フロー" と呼ばれます。
プロバイダーの SDK を使用する場合: アプリケーションは、ユーザーを手動でプロバイダーにサインインさせてから、検証のために App Service に認証トークンを送信します。 これはブラウザーレス アプリで通常のケースであり、プロバイダーのサインイン ページをユーザーに表示することはできません。 このアプリケーション コードはサインイン プロセスを管理し、"クライアント主導フロー" や "クライアント フロー" と呼ばれます。 これは、REST API、Azure Functions、JavaScript ブラウザー クライアント、プロバイダーの SDK を使用してユーザーがサインインするネイティブ モバイル アプリに適用されます。
次の表は認証フローの手順をまとめたものです。
手順 | プロバイダーの SDK を使わない場合 | プロバイダーの SDK を使う場合 |
---|---|---|
ユーザーをサインインさせる | クライアントを /.auth/login/<provider> にリダイレクトします。 |
クライアント コードはプロバイダーの SDK でユーザーを直接サインインさせ、認証トークンを受け取ります。 詳しくは、プロバイダーのドキュメントをご覧ください。 |
認証をポストする | プロバイダーはクライアントを /.auth/login/<provider>/callback にリダイレクトします。 |
クライアント コードは検証のためにプロバイダーからのトークンを /.auth/login/<provider> にポストします。 |
認証済みのセッションを確立する | App Service は認証された Cookie を応答に追加します。 | App Service は独自の認証トークンをクライアント コードに返します。 |
認証済みのコンテンツを提供する | クライアントは以降の要求に認証クッキーを含めます (ブラウザーによって自動的に処理されます)。 | クライアント コードは X-ZUMO-AUTH ヘッダーで認証トークンを提示します (Mobile Apps クライアント SDK によって自動的に処理されます)。 |
クライアント ブラウザーの場合、App Service は認証されていないすべてのユーザーを /.auth/login/<provider>
に自動的に送ることができます。 また、ユーザーが選んだプロバイダーを使ってアプリにサインインするための 1 つまたは複数の /.auth/login/<provider>
リンクをユーザーに表示することもできます。
認可の動作
Azure portal では、受信要求が認証されていない場合、App Service でさまざまな動作を構成できます。
認証されていない要求を許可する: このオプションでは、認証されていないトラフィックの承認をアプリケーション コードに委任します。 認証された要求について、App Service は HTTP ヘッダーで認証情報も渡します。 このオプションでは、匿名要求をいっそう柔軟に処理できます。 これにより、複数のサインイン プロバイダーをユーザーに提示できます。
認証が必要: このオプションでは、認証されていないとき、アプリケーションへのトラフィックを拒否します。 この拒否は、構成されているいずれかの ID プロバイダーへのリダイレクト操作になります。 このような場合は、選択したプロバイダーの
/.auth/login/<provider>
にブラウザー クライアントがリダイレクトされます。 匿名要求がネイティブ モバイル アプリからのものである場合、返される応答はHTTP 401 Unauthorized
です。 すべての要求に対してHTTP 401 Unauthorized
またはHTTP 403 Forbidden
になるように拒否を構成することもできます。注意事項
この方法でのアクセスの制限は、アプリへのすべての呼び出しに適用されますが、これは、多くのシングルページ アプリケーションのように、一般公開されているホーム ページを必要とするアプリには適切でない場合があります。
トークン ストア
App Service が提供する組み込みのトークン ストアは、Web アプリ、API、またはネイティブ モバイル アプリのユーザーに関連付けられているトークンのリポジトリです。 いずれかのプロバイダーで認証を有効にすると、このトークン ストアはアプリですぐに使用できるようになります。
ログとトレース
アプリケーション ログを有効にすると、認証と認可のトレースがログ ファイルで直接収集されます。 予期しない認証エラーが発生した場合は、既存のアプリケーション ログを参照して、すべての詳細を簡単に確認できます。