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 ノード Express を使用した Web アプリ、Electron を使用したデスクトップ アプリ、クロスプラットフォームのコンソール アプリ
MSAL Python Windows、macOS、Linux
MSAL React React および React ベースのライブラリ (Next.js、Gatsby.js) を備えたシングルページ アプリ

認証フロー

次の表は、Microsoft 認証ライブラリ (MSAL) によって提供されるさまざまな認証フローの一部をまとめたものです。 このようなフローはさまざまなアプリケーション シナリオで利用できます。

認証フロー 可能になること サポートされているアプリケーションの種類
認証コード ユーザーのサインインと、ユーザーの代理による Web API へのアクセス。 デスクトップ、モバイル、シングルページ アプリ (SPA) (PKCE が必要)、Web
クライアントの資格情報 アプリケーション自体の ID を使用した Web API へのアクセス。 通常、サーバー間の通信や、ユーザーの操作を必要としない自動スクリプトに使用されます。 デーモン
デバイス コード スマート テレビや IoT デバイスなどの入力に制約のあるデバイス上の、ユーザーのサインインと、ユーザーの代理による Web API へのアクセス。 コマンド ライン インターフェイス (CLI) アプリケーションでも使用されます。 デスクトップ、モバイル
暗黙的な許可 ユーザーのサインインと、ユーザーの代理による Web API へのアクセス。 暗黙的な許可フローは推奨されなくなりました。代わりに PKCE で認証コードを使用してください。 シングルページ アプリ (SPA)、Web
オンビハーフ・オブ (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 ブラウザーを通じて公開されますが、シークレットはバック チャネルでのみ渡され、直接公開されることはありません。