開発者のための Azure AD 情報まとめ

アプリケーションを開発する上で多くの場合はユーザー認証/認可が必要になります。Azure AD は簡単に実装できる ID 基盤として機能しますが、多くの機能やライブラリがあるため、この記事では開発者が知るべき Azure AD の使い方について、概要と公式ドキュメントのリンクなどを紹介します。

# Azure AD と Azure AD B2C

Azure AD は [Azure AD (B2B)](https://azure.microsoft.com/ja-jp/services/active-directory/) と [Azure AD B2C](https://azure.microsoft.com/ja-jp/services/active-directory/external-identities/b2c/) の 2 種類に分類でき、用途に応じて使い分けをします。B2B と B2C の比較については [External Identities ソリューションの比較](https://docs.microsoft.com/ja-jp/azure/active-directory/external-identities/compare-with-b2c?toc=%2Fazure%2Factive-directory-b2c%2FTOC.json&bc=%2Fazure%2Factive-directory-b2c%2Fbread%2Ftoc.json#compare-external-identities-solutions)を参照してください。

## 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](https://docs.microsoft.com/ja-jp/azure/active-directory/azuread-dev/active-directory-authentication-libraries) (Azure Directory Authentication Library) と [MSAL](https://docs.microsoft.com/ja-jp/azure/active-directory/develop/msal-overview) (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 を選択します。また既存の環境を使うか、新規にテナントを作るかを決める必要があります。検証時にはテスト用にテナントを作成してください。

[参考 クイック スタート:テナントを設定する](https://docs.microsoft.com/ja-jp/azure/active-directory/develop/quickstart-create-new-tenant)

この記事では Azure AD を使っていきます。

## サービスアプリケーションを登録する

Web API を開発している場合、まずはサービスをアプリケーションとして Azure AD に登録します。もし開発しているアプリケーションが Microsoft Graph など既存のサービスにアクセスするだけなら、次のステップに進んでください。

[参考 クイック スタート:Web API を公開するようにアプリケーションを構成する](https://docs.microsoft.com/ja-jp/azure/active-directory/develop/quickstart-configure-app-expose-web-apis)

アプリケーションの登録を行うと、提供する API のスコープを定義することができます。スコープの粒度はアプリケーションにより異なります。例えば Microsoft Graph の場合は各操作ごとに細かく設定できますが、Dynamics Customer Engagement などはユーザーとしてログインの 1 スコープのみとなっています。

開発しているアプリケーションでどのようにスコープを利用するか、事前に検討してください。

## クライアントアプリケーションを登録する

次にサービスを利用するクライアントを登録します。

[クイック スタート:Web API にアクセスするようにクライアント アプリケーションを構成する](https://docs.microsoft.com/ja-jp/azure/active-directory/develop/quickstart-configure-app-access-web-apis)

アプリケーションを登録すると以下の事ができるようになります。

- 登録したアプリケーションの Azure AD 上の Id が発行される
- クライアントが利用する API を設定できる

指定できる API は、マイクロソフトが提供している各種サービスに加え、前ステップで追加した独自サービスも対象となります。クイックスタートでも **Employees.Read.All** という独自スコープを選択しています。

## MSAL を使ってサービスにアクセスする

アプリケーションのタイプによって実際の実装は異なりますが、基本的な流れは同じです。例えば Windows デスクトップアプリが Microsoft Graph API を利用する場合、事前に登録したクライアント用アプリケーションに対してトークンを取得し、その後取得したトークンを使って Graph API へアクセスを行います。

![](https://docs.microsoft.com/ja-jp/azure/active-directory/develop/media/quickstart-v2-windows-desktop/windesktop-intro.svg)

各プラットフォームごとの例は公式ドキュメントを参照してください。

[参考 Microsoft ID プラットフォームのドキュメント](https://docs.microsoft.com/ja-jp/azure/active-directory/develop/)

上記のページには、シングルページアプリやモバイルアプリなど、各プラットフォームごとの例があります。

# まとめ

Azure AD は SDK が複数存在したり、サービスとクライアントの登録という、設置型時代にはなかった概念があるため、はじめは分かりずらいかもしれません。

まずは上記情報を参考に 1 つアプリケーションを作ってみてください。

# 参考

以下のレポジトリでは、.NET を使ったサンプルが詳細な説明とともに提供されています。英語ですが是非ご覧ください。
[GitHub: active-directory-dotnet-native-aspnetcore-v2](https://github.com/Azure-Samples/active-directory-dotnet-native-aspnetcore-v2)