Microsoft 認証ライブラリを調査する
Microsoft Authentication Library (MSAL) を使用すると、ユーザーを認証し、セキュリティで保護された Web API にアクセスするため、開発者は Microsoft ID プラットフォームからセキュリティ トークンを取得できます。 これは、Microsoft Graph、他の Microsoft API、サード パーティの Web API、独自の Web API への安全なアクセスを提供するために使用できます。MSAL は、.NET、JavaScript、Java、Python、Android、iOS など、さまざまなアプリケーション アーキテクチャとプラットフォームをサポートしています。
MSAL では、多くのプラットフォームで API に一貫性があり、さまざまな方法でトークンを取得できます。 MSAL の使用には次のような利点があります。
- アプリケーションのプロトコルに対して OAuth ライブラリまたはコードを直接使用する必要がありません。
- ユーザーやアプリケーション (プラットフォームに適用できるとき) の代わりにトークンを取得します。
- トークン キャッシュを保持し、有効期限が近づくとトークンを自動更新します。 トークンの期限切れを自分で処理する必要はありません。
- どの対象ユーザーがアプリケーションにサインインするかを指定するのに役立ちます。
- 構成ファイルからアプリケーションを設定する作業を支援します。
- アクション可能な例外、ログ記録、テレメトリを公開することでアプリの問題解決を支援します。
アプリケーションの種類とシナリオ
MSAL 内では、Web アプリケーション、Web API、シングルページ アプリ (JavaScript)、モバイル アプリケーション、ネイティブ アプリケーション、デーモン、サーバー側アプリケーションといったさまざまな種類のアプリケーションからトークンを取得できます。 MSAL は現在、次の表にあるプラットフォームとフレームワークをサポートしています。
ライブラリ | サポートされているプラットフォームとフレームワーク |
---|---|
MSAL for Android | Android |
MSAL Angular | Angular と Angular.js のフレームワークを使用したシングルページ アプリ |
iOS および macOS 用の MSAL | iOS と macOS |
MSAL Go (プレビュー) | Windows、macOS、Linux |
MSAL Java | Windows、macOS、Linux |
MSAL.js | Vue.js、Ember.js、Durandal.js など、JavaScript と TypeScript のフレームワーク |
MSAL.NET | .NET Framework、.NET、.NET MAUI、WINUI、Xamarin Android、Xamarin iOS、ユニバーサル Windows プラットフォーム |
MSAL Node | Express を使用した Web アプリ、Electron を使用したデスクトップ アプリ、クロスプラットフォーム コンソール アプリ |
MSAL Python | Windows、macOS、Linux |
MSAL React | React と React ベースのライブラリ (Next.js、Gatsby.js) を使用したシングルページ アプリ |
認証フロー
次の表は、Microsoft 認証ライブラリ (MSAL) によって提供されるさまざまな認証フローの一部をまとめたものです。 このようなフローはさまざまなアプリケーション シナリオで利用できます。
Authentication flow | 可能になること | サポートされているアプリケーションの種類 |
---|---|---|
Authorization code (承認コード) | ユーザーに代わって、ユーザーのサインインと Web API へのアクセスを行います。 | デスクトップ、モバイル、シングルページ アプリ (SPA) (PKCE が必要)、Web |
クライアント資格情報 | アプリケーション自体の ID を使用して Web API にアクセスします。 通常は、サーバー間通信や、ユーザー操作を必要としない自動化されたスクリプトに使用されます。 | Daemon |
デバイス コード | スマート TV や IoT デバイスなど、入力に制約のあるデバイスでユーザーに代わって、ユーザーのサインインと Web API へのアクセスを行います。 コマンド ライン インターフェイス (CLI) アプリケーションでも使用されます。 | デスクトップ、モバイル |
暗黙的な許可 | ユーザーに代わって、ユーザーのサインインと Web API へのアクセスを行います。 暗黙的な許可フローは推奨されなくなりました。代わりに PKCE で承認コードを使用してください。 | シングルページ アプリ (SPA)、Web |
On-behalf-of (OBO) | ユーザーに代わって、"アップストリーム" Web API から "ダウンストリーム" Web API にアクセスします。 ユーザーの ID と委任されたアクセス許可は、アップストリーム API からダウンストリーム API に渡されます。 | Web API |
ユーザー名/パスワード (ROPC) | アプリケーションはパスワードを直接処理することによって、ユーザーをサインインさせることができます。 ROPC フローは推奨されません。 | デスクトップ、モバイル |
統合 Windows 認証 (IWA) | ドメインまたは Microsoft Entra に参加しているコンピューターのアプリケーションは、サイレントで (ユーザーからの UI 操作なしで) トークンを取得できます。 | デスクトップ、モバイル |
パブリック クライアント アプリケーションと機密クライアント アプリケーション
Microsoft Authentication Library (MSAL) には、パブリック クライアントと機密クライアントの 2 種類のクライアントが定義されています。 クライアントは、ID プロバイダーによって割り当てられた一意識別子を持つソフトウェア エンティティです。 クライアントの種類は、承認サーバーを使用して安全に認証し、アクセス可能な範囲内のユーザーがアクセスまたは認識できないように機密性の高い ID 証明情報を保持する機能によって異なります。
特定のクライアントの性質がパブリックであるか機密であるかを調べる場合、そのクライアントが認証サーバーに自身の ID を証明できるかどうかを評価します。 承認サーバーがアクセス トークンを発行するには、クライアントの ID を信頼できる必要があるため、これは重要です。
パブリック クライアント アプリケーションはデスクトップなどのデバイス上で実行され、ブラウザーレス API、モバイル アプリ、クライアント側のブラウザー アプリなどがあります。 これらは、ユーザーに代わって Web API にアクセスできるだけであり、アプリケーション シークレットが安全に保持されるかどうかは信頼できません。 ソース、つまり特定のアプリのコンパイル済みバイトコードがどこかに送信されるときはいつでも、信頼できない関係者によって読み取り、逆アセンブル、または検査が行われる可能性があります。 また、パブリック クライアントは、パブリック クライアント フローのみをサポートし、構成時のシークレットを保持できないため、クライアント シークレットを持つことはできません。
機密クライアント アプリケーションはサーバー上で実行され、Web アプリ、Web API アプリ、サービス/デーモン アプリなどがあります。 これらはユーザーや攻撃者によるアクセスが難しいと考えられており、そのため、構成時のシークレットを適切に保持して、その ID の証拠をアサートすることができます。 クライアント ID は Web ブラウザーを介して公開されますが、シークレットはバック チャネルでのみ渡され、直接公開されることはありません。