アプリケーションを開発する上で多くの場合はユーザー認証/認可が必要になります。Azure AD は簡単に実装できる ID 基盤として機能しますが、多くの機能やライブラリがあるため、この記事では開発者が知るべき Azure AD の使い方について、概要と公式ドキュメントのリンクなどを紹介します。
Azure AD と Azure AD B2C
Azure AD は Azure AD (B2B) と Azure AD B2C の 2 種類に分類でき、用途に応じて使い分けをします。B2B と B2C の比較については External Identities ソリューションの比較を参照してください。
Azure AD (B2B)
企業で使われる ID 基盤として機能し、Microsoft 365 や Dynamics 365 などでも利用されます。他企業のユーザーをゲストとして登録する事もでき、複数の企業のユーザーが同じ Team 会議や Azure DevOps などのサービスに、自社のアカウントで参加するなど、B2B シナリオで利用できます。
また設置型の Active Directory がある場合、Azure AD と同期して利用することができます。
Azure AD B2C
一般の外部向けアプリケーションの ID 基盤として利用でき、独自のユーザー管理に追加して、Facebook や Twitter、LinkedIn や Microsoft アカウントなどの外部 ID プロバイダーと連携することもできます。
SDK : ADAL と MSAL
Azure AD の認証に使える SDK は ADAL (Azure Directory Authentication Library) と MSAL (Microsoft Authentication Library) がありますが、ADAL は新規機能の追加がもうサポートされず、今後は MSAL を使う事になりますので、MSAL 一択です。最大の違いは ADAL が Azure AD のみサポートする一方、MSAL は Azure AD および Azure AD B2C の両方に対応しています。
認証と認可
Azure AD は認証で OpenID Connect/SAML、認可で OAuth 2.0 を提供します。
開発者がやるべき作業
Azure AD を ID 基盤に決めた場合、以下の作業を行う必要があります。
- 利用するテナントを決める/作成する
- サービスアプリケーションを登録する
- クライアントアプリケーションを登録する
- MSAL を使って認証する
利用するテナントを決める/作成する
シナリオによって Azure AD か Azure AD B2C を選択します。また既存の環境を使うか、新規にテナントを作るかを決める必要があります。検証時にはテスト用にテナントを作成してください。
この記事では Azure AD を使っていきます。
サービスアプリケーションを登録する
Web API を開発している場合、まずはサービスをアプリケーションとして Azure AD に登録します。もし開発しているアプリケーションが Microsoft Graph など既存のサービスにアクセスするだけなら、次のステップに進んでください。
参考 クイック スタート:Web API を公開するようにアプリケーションを構成する
アプリケーションの登録を行うと、提供する API のスコープを定義することができます。スコープの粒度はアプリケーションにより異なります。例えば Microsoft Graph の場合は各操作ごとに細かく設定できますが、Dynamics Customer Engagement などはユーザーとしてログインの 1 スコープのみとなっています。
開発しているアプリケーションでどのようにスコープを利用するか、事前に検討してください。
クライアントアプリケーションを登録する
次にサービスを利用するクライアントを登録します。
クイック スタート:Web API にアクセスするようにクライアント アプリケーションを構成する
アプリケーションを登録すると以下の事ができるようになります。
- 登録したアプリケーションの Azure AD 上の Id が発行される
- クライアントが利用する API を設定できる
指定できる API は、マイクロソフトが提供している各種サービスに加え、前ステップで追加した独自サービスも対象となります。クイックスタートでも Employees.Read.All という独自スコープを選択しています。
MSAL を使ってサービスにアクセスする
アプリケーションのタイプによって実際の実装は異なりますが、基本的な流れは同じです。例えば Windows デスクトップアプリが Microsoft Graph API を利用する場合、事前に登録したクライアント用アプリケーションに対してトークンを取得し、その後取得したトークンを使って Graph API へアクセスを行います。
各プラットフォームごとの例は公式ドキュメントを参照してください。
参考 Microsoft ID プラットフォームのドキュメント
上記のページには、シングルページアプリやモバイルアプリなど、各プラットフォームごとの例があります。
まとめ
Azure AD は SDK が複数存在したり、サービスとクライアントの登録という、設置型時代にはなかった概念があるため、はじめは分かりずらいかもしれません。
まずは上記情報を参考に 1 つアプリケーションを作ってみてください。
参考
以下のレポジトリでは、.NET を使ったサンプルが詳細な説明とともに提供されています。英語ですが是非ご覧ください。
GitHub: active-directory-dotnet-native-aspnetcore-v2