Microsoft ID プラットフォームのアプリケーションの種類

Microsoft ID プラットフォームでは、さまざまな最新アプリ アーキテクチャ向けの認証がサポートされています。そのいずれも、業界標準のプロトコルである OAuth 2.0 または OpenID Connect に基づいています。 この記事では、使用する言語やプラットフォームを問わず、Microsoft ID プラットフォームを使用して作成できるアプリの種類について説明します。 情報は、アプリケーションのシナリオでコードを詳しく確認する前に大まかなシナリオを理解するうえで役立ちます。

基本

Microsoft ID プラットフォームを使用する各アプリを、Microsoft Entra 管理センターの [アプリの登録] で登録する必要があります。 アプリの登録プロセスでは、次の値が収集され、対象のアプリに割り当てられます。

  • アプリを一意に識別する アプリケーション (クライアント) ID
  • 応答をアプリにリダイレクトして戻すために使用できるリダイレクト URI
  • 他にいくつかのシナリオ固有の値 (サポートされているアカウントの種類など)

詳細については、アプリの登録方法を参照してください。

登録の済んだアプリは、エンドポイントに要求を送ることによって、Microsoft ID プラットフォームと通信します。 これらの要求の詳細に対処するオープン ソース フレームワークとライブラリをご用意しています。 これらのエンドポイントへの要求を作成して、自分で認証ロジックを実装してもかまいません。

https://login.microsoftonline.com/common/oauth2/v2.0/authorize
https://login.microsoftonline.com/common/oauth2/v2.0/token

Microsoft ID プラットフォームでサポートされているアプリの種類:

  • シングルページ アプリ (SPA)
  • Web アプリ
  • Web API
  • モバイル アプリとネイティブ アプリ
  • サービス、デーモン、スクリプト

シングルページ アプリ

最新アプリの多くには、主に JavaScript で記述されたシングル ページ アプリ (SPA) のフロントエンドがあり、Angular、React、Vue などのフレームワークと共に使用されることもあります。 Microsoft ID プラットフォームでは、認証に OpenID Connect プロトコルを使用し、OAuth 2.0 で定義されている 2 種類の承認付与のいずれかを使用するという方法でこれらのアプリがサポートされます。 サポートされている許可の種類は、OAuth 2.0 暗黙的な許可フローか、最新の OAuth 2.0 承認コードと PKCE フローです (以下を参照)。

このフロー図は、OAuth 2.0 認可コードの付与フローを示しています (PKCE に関する詳細は省略されています)。ここでは、アプリが Microsoft ID プラットフォームの authorize エンドポイントからコードを受信し、クロスサイト Web 要求を使用して、それをアクセス トークンと更新トークンと引き換えています。 SPA の場合、アクセス トークンは 1 時間有効であり、有効期限が切れると、更新トークンを使用して別のコードを要求する必要があります。 通常、アクセス トークンに加えて、クライアント アプリケーションにサインインしたユーザーを表す id_token も、同じフローまたは別の OpenID Connect 要求 (ここには示されていません) を介して要求されます。

シングル ページ アプリとセキュリティ トークン サービス エンドポイントの間の OAuth 2.0 認証コード フローを示す図。

この実際の動作については、「クイックスタート: シングルページ アプリ (SPA) でユーザーをサインインし、JavaScript を使用して Microsoft Graph API を呼び出す」を参照してください。

認証コード フローと暗黙的なフロー

OAuth 2.0 認可コード フローは、Safari やプライバシーを重視するその他のブラウザーでアプリの互換性を維持するための SPA のビルド方法として推奨されるようになりました。 サードパーティ Cookie を削除し、警戒を強めた後で、暗黙的なフローの使用を継続することはお勧めしません。

Web Apps

ブラウザーからアクセスされる Web アプリ (.NET、PHP、Java、Ruby、Python、Node) の場合、ユーザーのサインインに OpenID Connect を使うことができます。 OpenID Connect では、Web アプリは ID トークンを受け取ります。 ID トークンは、ユーザーの ID を検証し、要求の形でユーザーに関する情報を提供するセキュリティ トークンです。

// Partial raw ID token
abC1dEf2Ghi3jkL4mNo5Pqr6stU7vWx8Yza9...

// Partial content of a decoded ID token
{
    "name": "Casey Jensen",
    "email": "casey.jensen@onmicrosoft.com",
    "oid": "ab12cd34-effe-5678-9012-abcdef012345"
    ...
}

Microsoft ID プラットフォームで使われている各種のトークンの詳細については、アクセス トークンのリファレンスと id_token のリファレンスを参照してください。

Web サーバー アプリにおけるサインイン認証フローは、主に次のステップで構成されます。

Web アプリの認証フロー

Microsoft ID プラットフォームから受け取った公開署名キーを使用して ID トークンを検証することにより、ユーザーの ID を保証することができます。 以降のページ要求でユーザーを識別するために使用できるセッション Cookie が設定されます。

次のマルチパートのチュートリアル シリーズで、ユーザーをサインインさせる ASP.NET Core Web アプリを構築して、さらに詳しく学習する

Web サーバー アプリは、単純なサインインを実行するだけでなく、Representational State Transfer (REST) API をはじめとする他の Web サービスにアクセスすることが必要な場合があります。 この場合、Web サーバー アプリは、OpenID Connect と OAuth 2.0 を組み合わせたフローに関与します。その際使用されるのが OAuth 2.0 承認コード フローです。 このシナリオの詳細については、コード サンプルを参照してください。

Web API

Microsoft ID プラットフォームを使用すると、アプリの RESTful Web API などの Web サービスをセキュリティで保護できます。 Web API は、さまざまなプラットフォームや言語で実装できます。 また、Azure Functions で HTTP トリガーを使用して実装することもできます。 Web API では、ID トークンとセッション Cookie の代わりに OAuth 2.0 アクセス トークンを使って、そのデータをセキュリティで保護し、受信要求を認証します。

Web API の呼び出し元によって、次のように HTTP 要求の Authorization ヘッダーにアクセス トークンが追加されます。

GET /api/items HTTP/1.1
Host: www.mywebapi.com
Authorization: Bearer abC1dEf2Ghi3jkL4mNo5Pqr6stU7vWx8Yza9...
Accept: application/json
...

Web API では、そのアクセス トークンを使って API の呼び出し元の ID を検証し、アクセス トークンでエンコードされている要求から呼び出し元に関する情報を抽出します。 Microsoft ID プラットフォームで使われている各種のトークンの詳細については、アクセス トークンのリファレンスと ID トークンのリファレンスを参照してください。

Web API を使用すると、アクセス許可 (スコープとも呼ばれる) を公開することで、ユーザーが特定の機能またはデータをオプトイン/オプトアウトできるようになります。 呼び出し元のアプリがスコープに対するアクセス許可を取得するには、ユーザーがフローの途中でスコープに同意する必要があります。 Microsoft ID プラットフォームでは、ユーザーにアクセス許可を求め、Web API が受信するすべてのアクセス トークンにアクセス許可を記録します。 Web API では、呼び出しごとに受信するアクセス トークンを検証し、承認チェックを実行します。

Web API では、すべての種類のアプリ (Web サーバー アプリ、デスクトップ アプリとモバイル アプリ、シングル ページ アプリ、サーバー側のデーモン、さらにそれ以外の Web API など) からアクセス トークンを受信できます。 Web API の大まかなフローは次のとおりです。

Web API の認証フロー

OAuth2 アクセス トークンを使用して Web API をセキュリティ保護する方法については、保護された Web API のチュートリアルに関するページの Web API コード サンプルを確認してください。

多くの場合、Web API は Microsoft ID プラットフォームで保護されているその他のダウンストリーム Web API に、送信要求を行う必要もあります。 そのために、Web API では代理 (OBO) フローを利用できます。それにより、Web API は受信アクセス トークンを、送信要求で使用される別のアクセス トークンに交換できます。 詳細については、「Microsoft ID プラットフォームと OAuth 2.0 On-Behalf-Of フロー」をご覧ください。

モバイル アプリとネイティブ アプリ

多くの場合、モバイル アプリやデスクトップ アプリなど、デバイスにインストールされているアプリは、データを格納し、ユーザーの代わりにさまざまな機能を実行するバックエンド サービスや Web API にアクセスする必要があります。 これらのアプリは、OAuth 2.0 承認コード フローを使ってバックエンド サービスにサインインと承認を追加します。

このフローでは、ユーザーがサインインすると、アプリに Microsoft ID プラットフォームから承認コードが渡されます。 承認コードは、サインインしているユーザーに代わってバックエンド サービスを呼び出すためのアプリのアクセス許可を表します。 アプリはバックグラウンドで承認コードを OAuth 2.0 のアクセス トークンおよび更新トークンと交換します。 アプリではそのアクセス トークンを使って HTTP 要求で Web API を認証できます。また、古いアクセス トークンの有効期限が切れた場合は、更新トークンを使って新しいアクセス トークンを取得できます。

ネイティブ アプリの認証フロー

Note

アプリケーションで既定のシステム Web ビューが使用されている場合は、「Microsoft Entra 認証と承認のエラー コード」の "サインインの確認" 機能とエラーコード AADSTS50199 の情報を確認してください。

サーバー、デーモン、スクリプト

長時間実行されるプロセスを含むアプリや、ユーザーとのやりとりはなく動作するアプリにも、セキュリティで保護されたリソース (Web API など) にアクセスする方法が必要です。 これらのアプリは、OAuth 2.0 クライアント資格情報フローで (ユーザーの委任 ID ではなく) アプリの ID を使用して認証を行い、トークンを取得することができます。 アプリの ID は、クライアント シークレットまたは証明書を使用して証明することができます。 詳細については、Microsoft ID プラットフォームを使用する .NET デーモン コンソール アプリケーションに関するページを参照してください。

このフローでは、アプリは /token エンドポイントと直接対話してアクセスを取得します。

デーモン アプリの認証フロー

デーモン アプリを作成するには、クライアントの資格情報に関する記述を参照するか、.NET サンプル アプリをお試しください。

関連項目

Microsoft ID プラットフォームでサポートされているアプリケーションの種類について説明しました。さまざまなシナリオで使用されるプロトコル コンポーネントについて理解を深めるため、OAuth 2.0 と OpenID Connect の詳細についてご覧ください。