認証フローとアプリケーションのシナリオ

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 アプリ

ユーザーをサインインさせる Web アプリを効果的に保護するには、次の方法を使用します。

  • 開発に .NET 環境を採用している場合には、ASP.NET OpenID Connect ミドルウェアを使用した ASP.NET または ASP.NET Core を使用します。 リソース保護の一環として発生するセキュリティ トークンの検証処理については、MSAL ライブラリではなく、.NET 用の IdentityModel 拡張機能が担当します。

  • 開発に Node.js を採用している場合には、MSAL Node または Passport.js を使用します。

詳細については、ユーザーをサインインさせる Web アプリに関するページを参照してください。

ユーザーをサインインさせ、そのユーザーに代わって Web API を呼び出す Web アプリ

Web API を呼び出す Web アプリ

ユーザーに代わって Web アプリから Web API を呼び出すには、承認コード フローを使用し、取得したトークンをトークン キャッシュに格納します。 必要に応じて、MSAL によりトークンが更新されるほか、コントローラーによりキャッシュからトークンが取得されます。

詳細については、Web API を呼び出す Web アプリに関するページを参照してください。

サインイン済みのユーザーに代わって Web API を呼び出すデスクトップ アプリ

ユーザーをサインインさせるデスクトップ アプリで Web API を呼び出す場合には、MSAL に用意されている対話型のトークン取得メソッドを使用します。 このような対話型メソッドを使用すると、サインイン UI のエクスペリエンスを制御できます。 MSAL では、この対話に Web ブラウザーを使用します。

Web API を呼び出すデスクトップ アプリ

Windows ドメインに参加しているか、Azure Active Directory (Azure AD) を使って参加しているコンピューターで稼働している Windows ホスト アプリケーションについては、もう 1 つ選択肢があります。 このようなアプリケーションでは、統合 Windows 認証を使用すると、確認を表示せずにトークンを取得します。

ブラウザーがインストールされていないデバイス上で稼働しているアプリケーションであっても、ユーザーのために API を呼び出すことは可能です。 認証するには、Web ブラウザーがインストールされている別のデバイス上でユーザーがサインインする必要があります。 このシナリオでは、デバイス コード フローを使用する必要があります。

デバイス コード フロー

パブリック クライアント アプリケーションであればユーザー名とパスワードを使ったフローを使用することもできますが、お勧めはしません。 もっとも、DevOps などの一部のシナリオではこのフローが必要になります。

ユーザー名とパスワードを使ったフローを使用すると、アプリケーションに制約が発生します。 たとえば、アプリケーションでは、Azure AD の多要素認証や条件付きアクセス ツールを使用する必要があるユーザーをサインインさせることができなくなります。 また、アプリケーションでシングル サインオン (SSO) のメリットを享受することもできません。 ユーザー名とパスワードを使った認証は先進認証の原則に反しており、レガシへの対応のためにのみ提供されています。

デスクトップ アプリでトークン キャッシュを永続的にする場合は、トークン キャッシュのシリアル化をカスタマイズすることができます。 デュアル トークン キャッシュのシリアル化を実装すると、後方互換性と前方互換性を備えたトークン キャッシュを利用できるようになります。 これらのトークンでは、以前の世代の認証ライブラリがサポートされます。 ライブラリの具体例としては、.NET 用 Azure AD 認証ライブラリ (ADAL.NET) のバージョン 3 とバージョン 4 などがあります。

詳細については、Web API を呼び出すデスクトップ アプリに関するページを参照してください。

対話ユーザーに代わって Web API を呼び出すモバイル アプリ

モバイル アプリケーションでは、デスクトップ アプリケーションと同じように、MSAL に用意されている対話型のトークン取得メソッドを呼び出して、Web API を呼び出すためのトークンを取得します。

Web API を呼び出すモバイル アプリ

MSAL iOS と MSAL Android では、既定でシステム Web ブラウザーが使用されます。 もっとも、代わりに埋め込みの Web ビューを使用するように指定することもできます。 モバイル プラットフォームに依存する特異性があります。ユニバーサル Windows プラットフォーム (UWP)、iOS、または Android。

デバイス ID やデバイス登録に関連して条件付きアクセスを使用するシナリオなど、一部のシナリオでは、デバイス上にブローカーをインストールする必要があります。 ブローカーにはたとえば、Microsoft ポータル サイト (Android)、Microsoft Authenticator (Android および iOS) があります。 MSAL はブローカーと対話できるようになりました。 ブローカーの詳細については、「Android と iOS でブローカーを利用する」を参照してください。

詳細については、Web API を呼び出すモバイル アプリに関するページを参照してください。

注意

MSAL.iOS、MSAL.Android、または MSAL.NET on Xamarin を使用しているモバイル アプリでは、アプリ保護ポリシーを適用できます。 このポリシーを使うと、保護されているテキストをユーザーがコピーできないようにしたりすることができます。 モバイル アプリは Intune によって管理され、Intune によりマネージド アプリとして認識されます。 詳細については、「Microsoft Intune App SDK の概要」を参照してください。

Intune SDK は MSAL ライブラリとは別のものであり、独自に Azure AD と対話します。

保護された 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 に関するページを参照してください。

独自に Web API を呼び出すデーモン アプリ

長時間実行されるプロセスを含んだアプリや、ユーザーの介入なしで動作するアプリも、セキュリティで保護された Web API になんらかの形でアクセスする必要があります。 そのようなアプリでは、認証やトークンの取得にアプリの ID を使用します。 アプリの ID 証明には、クライアント シークレットまたは証明書が使用されます。

呼び出し元のアプリに代わってトークンを取得するデーモン アプリは、MSAL のクライアント資格情報取得メソッドを使用して作成できます。 これらのメソッドには、Azure AD にアプリの登録を追加するクライアント シークレットが必要です。 そのうえで、そのアプリと呼び出されたデーモンとの間でシークレットが共有されます。 シークレットには、アプリケーションのパスワード、証明書アサーション、クライアント アサーションなどがあります。

他のアプリと API によって呼び出されるデーモン アプリ

詳細については、Web API を呼び出すデーモン アプリケーションに関するページを参照してください。

シナリオとサポートされている認証フロー

トークンを要求するアプリケーションのシナリオを実装するには、認証フローを使用します。 アプリケーション シナリオと認証フローの間に 1 対 1 の対応関係はありません。

トークンの取得が必要なシナリオは、OAuth 2.0 認証フローにも対応します。 詳細については、「Microsoft ID プラットフォームにおける OAuth 2.0 プロトコルと OpenID Connect プロトコル」を参照してください。

シナリオ 詳細なシナリオのチュートリアル OAuth 2.0 のフローと許可 対象ユーザー
Single-Page App with Auth code シングルページ アプリ PKCE を使用した認可コード 職場または学校アカウント、個人用アカウント、Azure Active Directory B2C (Azure AD B2C)
Single-Page App with Implicit シングルページ アプリ 暗黙的 職場または学校アカウント、個人用アカウント、Azure Active Directory B2C (Azure AD B2C)
Web app that signs in users ユーザーをサインインさせる Web アプリ 承認コード 職場または学校アカウント、個人用アカウント、Azure AD B2C
Web app that calls web APIs Web API を呼び出す Web アプリ 承認コード 職場または学校アカウント、個人用アカウント、Azure AD B2C
Desktop app that calls web APIs Web API を呼び出すデスクトップ アプリ 対話型 (PKCE を使用した認可コードを利用) 職場または学校アカウント、個人用アカウント、Azure AD B2C
統合 Windows 認証 職場または学校アカウント
リソース所有者のパスワード 職場または学校アカウントと Azure AD B2C
Browserless application デバイス コード Azure AD B2C でない職場または学校アカウント、個人用アカウント
Mobile app that calls web APIs Web API を呼び出すモバイル アプリ 対話型 (PKCE を使用した認可コードを利用) 職場または学校アカウント、個人用アカウント、Azure AD B2C
リソース所有者のパスワード 職場または学校アカウントと Azure AD B2C
Daemon app that calls web APIs Web API を呼び出すデーモン アプリ クライアントの資格情報 ユーザーが介在せず、Azure AD 組織でのみ使用されるアプリ専用アクセス許可
Web API that calls web APIs Web API を呼び出す Web API On-Behalf-Of 職場または学校アカウントと個人用アカウント

シナリオとサポートされているプラットフォームと言語

Microsoft 認証ライブラリでは、さまざまなプラットフォームをサポートしています。

  • .NET Core
  • .NET Framework
  • Java
  • JavaScript
  • macOS
  • ネイティブ Android
  • ネイティブ iOS
  • Node.js
  • Python
  • Windows 10/UWP
  • Xamarin.iOS
  • Xamarin.Android

また、さまざまな言語を使用してアプリケーションをビルドすることもできます。

注意

アプリケーションの種類によっては、プラットフォームで利用できないことがあります。

次の表の Windows の列で .NET Core と書いてある場合には、.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
シングルページ アプリ
シングルページ アプリ暗黙
MSAL.js
MSAL.js
MSAL.js
MSAL.js
MSAL.js
MSAL.js
MSAL.js MSAL.js MSAL.js
MSAL.js
ユーザーをサインインさせる Web アプリ
ユーザーをサインインさせる Web アプリ
ASP.NET Core
ASP.NET Core MSAL Node
MSAL Node
ASP.NET Core
ASP.NET Core MSAL Node
MSAL Node
ASP.NET Core
ASP.NET Core MSAL Node
MSAL Node
Web API を呼び出す Web アプリ

Web API を呼び出す Web アプリ
ASP.NET Core
ASP.NET Core + MSAL.NET MSAL Java
MSAL Java
MSAL Python
Flask + MSAL Python MSAL Node
MSAL Node
ASP.NET Core
ASP.NET Core + MSAL.NET MSAL Java
MSAL Java
MSAL Python
Flask + MSAL Python MSAL Node
MSAL Node
ASP.NET Core
ASP.NET Core + MSAL.NET MSAL Java
MSAL Java
MSAL Python
Flask + MSAL Python MSAL Node
MSAL Node
Web API を呼び出すデスクトップ アプリ

Web API を呼び出すデスクトップ アプリ デバイス コード フロー
.NET CoreMSAL.NET MSAL Java
MSAL Java
MSAL Python
MSAL Python MSAL Node
MSAL Node
.NET CoreMSAL.NET MSAL Java
MSAL Java
MSAL Python
MSAL Python MSAL Node
MSAL Node
.NET CoreMSAL.NET MSAL Java
MSAL Java
MSAL Python
MSAL Python
MSAL Node
MSAL Node
iOS / Objective C または Swift MSAL.objc
Web API を呼び出すモバイル アプリ
Web API を呼び出すモバイル アプリ
UWP MSAL.NET Xamarin MSAL.NET iOS / Objective C または Swift MSAL.objc Android MSAL.Android
デーモン アプリ
デーモン アプリ
.NET CoreMSAL.NET MSAL Java
MSAL Java
MSAL Python
MSAL Python MSAL Node
MSAL Node
.NET Core MSAL.NET MSAL Java
MSAL Java
MSAL Python
MSAL Python MSAL Node
MSAL Node
.NET CoreMSAL.NET MSAL Java
MSAL Java
MSAL Python
MSAL Python MSAL Node
MSAL Node
Web API を呼び出す Web API

Web API を呼び出す Web API
ASP.NET Core
ASP.NET Core + MSAL.NET MSAL Java
MSAL Java
MSAL Python
MSAL Python MSAL Node
MSAL Node
.NET Core
ASP.NET Core + MSAL.NET MSAL Java
MSAL Java
MSAL Python
MSAL Python MSAL Node
MSAL Node
.NET Core
ASP.NET Core + MSAL.NET MSAL Java
MSAL Java
MSAL Python
MSAL Python MSAL Node
MSAL Node

詳細については、「Microsoft ID プラットフォームの認証ライブラリ」を参照してください。

次のステップ