Microsoft ID プラットフォームのアプリの種類と認証フロー
Microsoft ID プラットフォームは、さまざまなモダン アプリケーション アーキテクチャのための認証をサポートしています。 アーキテクチャはいずれも、業界標準のプロトコル OAuth 2.0 and OpenID Connect に基づいています。 アプリケーションでは、Microsoft ID プラットフォームの認証ライブラリを使用して ID が認証され、保護された API にアクセスするためのトークンが取得されます。
この記事では、認証フローと、アプリケーションでそれらを使用するシナリオについて説明します。
アプリケーションのカテゴリ
セキュリティ トークンを取得できるアプリケーションには、以下をはじめとするいくつかの種類があります。
- Web Apps
- モバイル アプリ
- デスクトップ アプリ
- Web API
また、ブラウザーがインストールされていないデバイスやモノのインターネット (IoT) 上で運用されているデバイスで稼働しているアプリからも、トークンを取得できます。
以降のセクションでは、アプリケーションのカテゴリについて説明します。
保護されたリソースとクライアント アプリケーション
認証シナリオには、次の 2 つのアクティビティが含まれます。
- 保護された Web API のセキュリティ トークンの取得:Microsoft が開発し、サポートしている Microsoft Authentication Library (MSAL) の使用をお勧めします。
- Web API (または Web アプリ) の保護:これらのリソースの保護に関する課題の 1 つに、セキュリティ トークンの検証があります。 Microsoft では、一部のプラットフォームについてミドルウェア ライブラリを提供しています。
ユーザーありまたはユーザーなし
ほとんどの認証シナリオでは、サインインしたユーザーのためにトークンを取得することになります。
ただし、デーモン アプリも存在します。 それらのシナリオではユーザーが存在せず、アプリケーションが自らのためにトークンを取得します。
シングルページ、パブリック クライアント、機密クライアント アプリケーション
セキュリティ トークンは、さまざまなアプリケーションから取得できます。 そのようなアプリケーションは多くの場合、次の 3 つのカテゴリに分類されます。 それぞれ、併用するライブラリとオブジェクトが異なります。
シングルページ アプリケーション:SPA とも呼ばれる Web アプリで、ブラウザーで実行している JavaScript または TypeScript アプリからトークンを取得します。 モダン アプリケーションには、主に JavaScript で記述されたシングルページのアプリケーションがフロントエンドに備わっていることが少なくありません。 アプリケーションで Angular、React、Vue などのフレームワークを使用することもよくあります。 MSAL.js は、シングルページ アプリケーションをサポートする唯一の Microsoft 認証ライブラリです。
パブリック クライアント アプリケーション:このカテゴリのアプリは、常にユーザーをサインインさせます。たとえば、次のタイプのアプリがあります。
- サインイン ユーザーの代わりに Web API を呼び出すデスクトップ アプリケーション
- モバイル アプリ
- ブラウザーがインストールされていないデバイス (IoT 上で運用されているデバイスなど) で稼働しているアプリ
機密クライアント アプリケーション:このカテゴリには、次のようなアプリが該当します。
- Web API を呼び出す Web アプリ
- Web API を呼び出す Web API
- デーモン アプリケーション (Linux デーモンや Windows サービスのようにコンソール サービスとして実装されている場合も含む)
サインイン対象ユーザー
利用できる認証フローは、サインインの対象ユーザーによって異なります。 一部のフローは、職場または学校アカウントでのみ利用できます。 また、職場または学校アカウントと個人用 Microsoft アカウントのどちらでも利用できるフローもあります。
詳細については、「サポートされているアカウントの種類」を参照してください。
アプリケーションのタイプ
Microsoft ID プラットフォームでは、これらのアプリ アーキテクチャのための認証がサポートされています。
- シングルページ アプリ
- Web Apps
- Web API
- モバイル アプリ
- ネイティブ アプリ
- デーモン アプリ
- サーバーサイド アプリ
アプリケーションでは、さまざまな認証フローを使用してユーザーのサインインを行い、トークンを取得して保護された API を呼び出します。
シングルページ アプリ
最新の Web アプリの多くは、クライアント側のシングル ページ アプリケーションとして構築されています。 これらのアプリケーションでは、JavaScript またはフレームワーク (Angular、Vue、React など) が使用されています。 このようなアプリケーションは、Web ブラウザー内で稼働します。
シングルページ アプリケーションは、認証の特性の点で、従来からあるサーバー側の Web アプリとは異なります。 Microsoft ID プラットフォームを使うと、シングルページ アプリケーションでユーザーをサインインさせ、バックエンド サービスまたは Web API にアクセスするためのトークンを取得することができます。 Microsoft ID プラットフォームでは、JavaScript アプリケーション用の 2 つの付与タイプが提供されています。
MSAL.js (2.x) | MSAL.js (1.x) |
---|---|
ユーザーをサインインさせる Web アプリ
ユーザーをサインインさせる Web アプリを効果的に保護するには、次の方法を使用します。
開発に .NET 環境を採用している場合には、ASP.NET OpenID Connect ミドルウェアを使用した ASP.NET または ASP.NET Core を使用します。 リソース保護の一環として発生するセキュリティ トークンの検証処理については、MSAL ライブラリではなく、.NET 用の IdentityModel 拡張機能が担当します。
開発に Node.js を採用している場合には、MSAL ノード を使用します。
詳細については、ユーザーをサインインさせる Web アプリに関するページを参照してください。
ユーザーをサインインさせ、そのユーザーに代わって Web API を呼び出す Web アプリ
ユーザーに代わって Web アプリから Web API を呼び出すには、承認コード フローを使用し、取得したトークンをトークン キャッシュに格納します。 必要に応じて、MSAL によりトークンが更新されるほか、コントローラーによりキャッシュからトークンが取得されます。
詳細については、Web API を呼び出す Web アプリに関するページを参照してください。
サインイン済みのユーザーに代わって Web API を呼び出すデスクトップ アプリ
ユーザーをサインインさせるデスクトップ アプリで Web API を呼び出す場合には、MSAL に用意されている対話型のトークン取得メソッドを使用します。 このような対話型メソッドを使用すると、サインイン UI のエクスペリエンスを制御できます。 MSAL では、この対話に Web ブラウザーを使用します。
Windows ドメインに参加しているか、Microsoft Entra ID を使用して参加しているコンピューターで稼働している Windows ホスト アプリケーションについては、もう 1 つ選択肢があります。 このようなアプリケーションでは、統合 Windows 認証を使用すると、確認を表示せずにトークンを取得します。
ブラウザーがインストールされていないデバイス上で稼働しているアプリケーションであっても、ユーザーのために API を呼び出すことは可能です。 認証するには、Web ブラウザーがインストールされている別のデバイス上でユーザーがサインインする必要があります。 このシナリオでは、デバイス コード フローを使用する必要があります。
パブリック クライアント アプリケーションであればユーザー名とパスワードを使ったフローを使用することもできますが、お勧めはしません。 もっとも、DevOps などの一部のシナリオではこのフローが必要になります。
ユーザー名とパスワードを使ったフローを使用すると、アプリケーションに制約が発生します。 たとえば、アプリケーションでは、Microsoft Entra ID の多要素認証や条件付きアクセス ツールを使用する必要があるユーザーをサインインさせることができなくなります。 また、アプリケーションでシングル サインオン (SSO) のメリットを享受することもできません。 ユーザー名とパスワードを使った認証は先進認証の原則に反しており、レガシへの対応のためにのみ提供されています。
デスクトップ アプリでトークン キャッシュを永続的にする場合は、トークン キャッシュのシリアル化をカスタマイズすることができます。 デュアル トークン キャッシュのシリアル化を実装すると、後方互換性と前方互換性を備えたトークン キャッシュを利用できるようになります。
詳細については、Web API を呼び出すデスクトップ アプリに関するページを参照してください。
対話ユーザーに代わって Web API を呼び出すモバイル アプリ
モバイル アプリケーションでは、デスクトップ アプリケーションと同じように、MSAL に用意されている対話型のトークン取得メソッドを呼び出して、Web API を呼び出すためのトークンを取得します。
MSAL iOS と MSAL Android では、既定でシステム Web ブラウザーが使用されます。 もっとも、代わりに埋め込みの Web ビューを使用するように指定することもできます。 モバイル プラットフォームに依存する特異性があります。ユニバーサル Windows プラットフォーム (UWP)、iOS、または Android。
デバイス ID やデバイス登録に関連して条件付きアクセスを使用するシナリオなど、一部のシナリオでは、デバイス上にブローカーをインストールする必要があります。 ブローカーにはたとえば、Microsoft ポータル サイト (Android)、Microsoft Authenticator (Android および iOS) があります。
詳細については、Web API を呼び出すモバイル アプリに関するページを参照してください。
Note
MSAL iOS または MSAL Android を使用しているモバイル アプリでは、アプリ保護ポリシーを適用できます。 このポリシーを使うと、保護されているテキストをユーザーがコピーできないようにしたりすることができます。 モバイル アプリは Intune によって管理され、Intune によりマネージド アプリとして認識されます。 詳細については、「Microsoft Intune App SDK の概要」を参照してください。
Intune SDK は MSAL ライブラリとは別のものであり、独自に Microsoft Entra ID と対話します。
保護された Web API
Microsoft ID プラットフォーム エンドポイントを使用すると、アプリの RESTful API などの Web サービスをセキュリティで保護できます。 保護された Web API は、アクセス トークンを使用して呼び出されます。 トークンは、API のデータの保護と受信要求の認証に役立てられます。 Web API の呼び出し元によって、HTTP 要求の Authorization ヘッダーにアクセス トークンが付加されます。
ASP.NET または ASP.NET Core Web API を保護する場合は、アクセス トークンを検証します。 この検証には、ASP.NET JWT ミドルウェアを使用します。 検証は MSAL.NET ではなく、.NET ライブラリ用の IdentityModel 拡張機能によって行われます。
詳細については、保護された Web APIに関するページを参照してください。
ユーザーに代わって別の Web API を呼び出す Web API
保護された Web API から、ユーザーに代わって別の Web API を呼び出すには、アプリでダウンストリームの Web API のトークンを取得する必要があります。 このような呼び出しは、"サービス間" 呼び出しと呼ばれることがあります。 他の Web API を呼び出す Web API では、カスタム キャッシュのシリアル化を提供する必要があります。
詳細については、Web API を呼び出す Web API に関するページを参照してください。
独自に Web API を呼び出すデーモン アプリ
長時間実行されるプロセスを含んだアプリや、ユーザーの介入なしで動作するアプリも、セキュリティで保護された Web API になんらかの形でアクセスする必要があります。 そのようなアプリでは、認証やトークンの取得にアプリの ID を使用します。 アプリの ID 証明には、クライアント シークレットまたは証明書が使用されます。
呼び出し元のアプリに代わってトークンを取得するデーモン アプリは、MSAL のクライアント資格情報取得メソッドを使用して作成できます。 これらのメソッドには、Microsoft Entra ID にアプリの登録を追加するクライアント シークレットが必要です。 そのうえで、そのアプリと呼び出されたデーモンとの間でシークレットが共有されます。 シークレットには、アプリケーションのパスワード、証明書アサーション、クライアント アサーションなどがあります。
詳細については、Web API を呼び出すデーモン アプリケーションに関するページを参照してください。
シナリオとサポートされている認証フロー
トークンを要求するアプリケーションのシナリオを実装するには、認証フローを使用します。 アプリケーション シナリオと認証フローの間に 1 対 1 の対応関係はありません。
トークンの取得が必要なシナリオは、OAuth 2.0 認証フローにも対応します。 詳細については、「Microsoft ID プラットフォームにおける OAuth 2.0 プロトコルと OpenID Connect プロトコル」を参照してください。
シナリオ | 詳細なシナリオのチュートリアル | OAuth 2.0 のフローと許可 | 対象ユーザー |
---|---|---|---|
シングルページ アプリ | PKCE を使用した認可コード | 職場または学校アカウント、個人用アカウント、Azure Active Directory B2C (Azure AD B2C) | |
シングルページ アプリ | 暗黙的 | 職場または学校アカウント、個人用アカウント、Azure Active Directory B2C (Azure AD B2C) | |
ユーザーをサインインさせる Web アプリ | 承認コード | 職場または学校アカウント、個人用アカウント、Azure AD B2C | |
Web API を呼び出す Web アプリ | 承認コード | 職場または学校アカウント、個人用アカウント、Azure AD B2C | |
Web API を呼び出すデスクトップ アプリ | 対話型 (PKCE を使用した認可コードを利用) | 職場または学校アカウント、個人用アカウント、Azure AD B2C | |
統合 Windows 認証 | 職場または学校アカウント | ||
リソース所有者のパスワード | 職場または学校アカウントと Azure AD B2C | ||
ブラウザーレス アプリ | デバイス コード | Azure AD B2C でない職場または学校アカウント、個人用アカウント | |
Web API を呼び出すモバイル アプリ | 対話型 (PKCE を使用した認可コードを利用) | 職場または学校アカウント、個人用アカウント、Azure AD B2C | |
リソース所有者のパスワード | 職場または学校アカウントと Azure AD B2C | ||
Web API を呼び出すデーモン アプリ | クライアントの資格情報 | ユーザーが介在せず、Microsoft Entra 組織でのみ使用されるアプリ専用アクセス許可 | |
Web API を呼び出す Web API | On-Behalf-Of | 職場または学校アカウントと個人用アカウント |
シナリオとサポートされているプラットフォームと言語
Microsoft 認証ライブラリでは、さまざまなプラットフォームをサポートしています。
- .NET
- .NET Framework
- Java
- JavaScript
- macOS
- ネイティブ Android
- ネイティブ iOS
- Node.js
- Python
- Windows 10/UWP
また、さまざまな言語を使用してアプリケーションをビルドすることもできます。
次の表の Windows の列で .NET と書いてある場合には、.NET Framework でも対応可能です。 後者は表のスペースの関係で省略しています。
シナリオ | Windows | Linux | Mac | iOS | Android |
---|---|---|---|---|---|
シングルページ アプリ |
MSAL.js |
MSAL.js |
MSAL.js |
MSAL.js | MSAL.js |
シングルページ アプリ |
MSAL.js |
MSAL.js |
MSAL.js |
MSAL.js | MSAL.js |
ユーザーをサインインさせる Web アプリ |
ASP.NET Core MSAL Node |
ASP.NET Core MSAL Node |
ASP.NET Core MSAL Node |
||
Web API を呼び出す Web アプリ |
ASP.NET Core + MSAL.NET MSAL Java Flask + MSAL Python MSAL Node |
ASP.NET Core + MSAL.NET MSAL Java Flask + MSAL Python MSAL Node |
ASP.NET Core + MSAL.NET MSAL Java Flask + MSAL Python MSAL Node |
||
Web API を呼び出すデスクトップ アプリ |
MSAL.NET MSAL Java MSAL Python MSAL Node |
MSAL.NET MSAL Java MSAL Python MSAL Node |
MSAL.NET MSAL Java MSAL Python MSAL Node MSAL.objc |
||
Web API を呼び出すモバイル アプリ |
MSAL.NET MSAL.NET | MSAL.objc | MSAL.Android | ||
デーモン アプリ |
MSAL.NET MSAL Java MSAL Python MSAL Node |
MSAL.NET MSAL Java MSAL Python MSAL Node |
MSAL.NET MSAL Java MSAL Python MSAL Node |
||
Web API を呼び出す Web API |
ASP.NET Core + MSAL.NET MSAL Java MSAL Python MSAL Node |
ASP.NET Core + MSAL.NET MSAL Java MSAL Python MSAL Node |
ASP.NET Core + MSAL.NET MSAL Java MSAL Python MSAL Node |
詳細については、「Microsoft ID プラットフォームの認証ライブラリ」を参照してください。
次のステップ
認証の詳細については、次を参照してください。