Windows Azure AD Developer Preview の新機能: Windows Azure Authentication Library
このポストは、8 月 2 日に投稿された Introducing a New Capability in the Windows Azure AD Developer Preview: the Windows Azure Authentication Library の翻訳です。
先月、マイクロソフトは Windows Azure Active Directory (Windows Azure AD) の開発者プレビュー版を発表しました。Windows Azure Active Directory をマイクロソフト外部の開発者に公開するプロセスの第一弾となります。このリリースについては、こちらの記事をご覧ください。
今回は、この開発者プレビュー版の新機能、Windows Azure Authentication Library (AAL とも表記されます) をご紹介します。.NET 開発者はこの機能により、Windows Azure AD を有効活用したさまざまなシナリオをすばやく簡単に実現できます。たとえば、アプリケーション API へのセキュアなアクセスの確保や、他のネイティブ クライアントやサービスベース アプリケーション向けのサービス API の公開が可能になります。
ネイティブ クライアントや API の保護領域に関するマイクロソフトの構想を垣間見ることができるこの AAL 開発者プレビュー版は、ライブラリを格納した NuGet パッケージ群、事前にプロビジョニングされたテナントでそのまま実行可能なサンプル集、使用を開始するために必要な基本資料で構成されます。
本題に入る前に開発者の皆さんにお知らせしておくと、Windows Azure AD でサポートされている標準準拠プロトコル (現時点では WS-Fed および OAuth。今後サポートを拡大) を使った直接の開発も、完全にサポートされています。ライブラリは、すばやく簡単に Windows Azure AD を使い始めたい開発者向けの新たな選択肢となります。
それでは、AAL 開発者プレビュー版の詳細、活用方法、そして今後の展望について詳しく説明します。
開発者プレビュー版 Windows Azure Authentication Library の機能
このライブラリは .NET アセンブリであり、NuGet パッケージとして配布されるため、Visual Studio から直接プロジェクトに追加することが可能です (NuGet の詳細については、こちら (英語) を参照してください)。
Windows Azure Authentication Library には .NET クライアント アプリケーション機能とサービス機能の両方が含まれます。クライアント機能としては、このライブラリによって以下が可能になります。
- Windows Azure AD の Directory テナント、AD FS 2.0 サーバー、および Azure AD Access Control がサポートするすべての ID プロバイダー (Windows Live ID、Facebook、Google、Yahoo!、OpenID プロバイダー、WS-Federation プロバイダー) で認証を行うようユーザーに要求
- 現在のワークステーション ユーザーのユーザー名/パスワードまたは Kerberos チケットを利用してプログラムでトークンを取得
- サービス プリンシパル情報を利用してサーバー間のサービス コール用のトークンを取得
最初の 2 つの機能は、WPF アプリケーションやコンソール アプリケーションといったソリューションのセキュリティ保護に使用できます。3 つ目の機能は、従来のサーバー間統合に使用できます。
AAL により、Windows Azure AD Access Control 名前空間と Directory テナントの両方から機能群にアクセスできるようになります。これらの機能はすべてシンプルなプログラミング モデルで提供されます。Windows Azure AD のテナントには、呼び出すサービス、サーバーが信頼する ID プロバイダー、Windows Azure AD がトークンの署名に使用するキーなどの情報が格納されており、AAL はこれらの情報を使用して、ユーザーに代わって下位レベルの構成やプロトコル情報に対応します。ライブラリの動作の詳細については、Vittorio Bertocci の記事 (英語) を参照してください。
では、Windows Azure Authentication Library によって、実際にコード量をどの程度減らすことができるのでしょうか。これを端的に説明するため、Windows Azure AD 開発者プレビュー版の Graph API サンプル (英語) を更新し、AAL を使用して Graph の起動に必要なトークンを取得できるようにしました。オリジナルのサンプルでは、トークンを取得するためにおよそ 700 行のカスタム コードが記述されていますが、AAL を使えばライブラリを呼び出す 7 行のコードで済みます。
サービス側の機能としては、受信したトークンを検証して呼び出し元の ID を ClaimsPrincipal 形式で返すことが可能になり、マイクロソフトの他の開発プラットフォームと一貫した動作を実現できます。
Windows Azure Authentication Library と共に、このライブラリで実装可能な主要シナリオのサンプル集がリリースされており、「MSDN コード レシピ」の以下のページから個別にダウンロードできます。
- Native Application to REST Service – Authentication via Browser Popup (ネイティブ アプリケーションから REST サービスへ – ブラウザー ポップアップによる認証)
- Native Application to REST Service – Authentication via User Credentials (ネイティブ アプリケーションから REST サービスへ – ユーザー資格情報による認証)
- Server to Server Authentication (サーバー間認証)
- Windows Azure AD People Picker – Updated with AAL (Windows Azure AD ユーザー選択ウィンドウ – AAL 向けに更新)
これらのサンプルは、簡単に試せるように事前にプロビジョニングされたテナントで動作するよう構成されています。また、付属の Readme ドキュメントにて、独自の Directory テナントや Windows Azure AD Access Control 名前空間を利用できるように Visual Studio ソリューションを再構成する方法を詳しく説明しています。
MSDN ライブラリの Windows Azure Active Directory のページ (英語) には AAL に関する基本的な資料が用意されています。
今後の展望
先に述べたように、開発者プレビュー版 AAL では、ネイティブ クライアントと API の保護領域に対するマイクロソフトの考えを垣間見ることができます。初期開発段階にネイティブ アプリケーションや API を色々と試す機会を皆さんに提供することが開発者プレビュー版リリースの目的です。皆さんのご意見、ご感想を Windows Azure AD MSDN フォーラムまでお寄せください。プレビュー版であるため、一部の機能は将来変更される予定です。予定している変更について以下に示します。
さらに多くのプラットフォームに対応
開発者プレビュー版では .NET アプリケーションを対象としていますが、このライブラリは他の多くのプラットフォームでも有用になると思われます。
クライアント アプリケーションについては、WinRT、iOS、Android などの各プラットフォーム版 AAL を現在開発中で、今後さらに対応を拡大する可能性もあります。サービス側の機能についても、言語サポートを拡大する予定です。対応を希望されるプラットフォームがありましたら、ぜひお知らせください。
Access Control 名前空間と Directory テナントの機能の統一
開発者プレビュー版リリースの最初の発表で説明したように、現時点で Access Control 名前空間と Directory テナントの間にはいくつか違いがあります。プログラミング モデルは各種テナントを通じて一貫しており、コードを変更する必要はありませんが、テナントの種類によって使用可能な機能が異なります。今後、こうした差異を徐々に解消していく予定です。
ライブラリのリファクタリング
今回の開発者プレビュー用にリリースされたアセンブリは、ネイティブ コアを中心としています。このようなアーキテクチャになっているのは、他のライブラリ (クレーム ベースの ID 機能をいくつかのマイクロソフト製品に追加するためのライブラリ) とコードを一部共有しているためです。.NET アプリケーションで開発者プレビュー版 Windows Azure Authentication Library を使用するにあたり、このネイティブ コアが原因で一定の制約が生じます。例えば、使用するライブラリのバージョンを決める際に、アーキテクチャの "ビット数" (x86/x64) を考慮する必要があります。既知の制約の詳細な一覧については、サンプルに含まれるリリース ノートを参照してください。今後リリースされる .NET 用の Windows Azure Authentication Library にはネイティブ コアは含まれません。
また、開発者プレビュー版 AAL にはクライアント機能とサービス側の機能の両方が含まれますが、今後はクライアント機能のみとなります。トークン検証、OAuth2 認証フローの処理などのサービス側の機能は、WIF Extensions for OAuth2 の流れを引き継ぐ形で、Windows Identity Foundation の個別の拡張機能として提供する予定です。
Windows Azure Authentication Library とオープンソース
開発者プレビュー版 Windows Azure Authentication Library のプログラミング モデルはシンプルなため、高度な開発に慣れたユーザーにとっては細かな設定ができず、物足りないかもしれません。こうしたニーズに対応するため、オープン ソース ライセンスの AAL のリリースを計画しています。開発者はコードをフォークしたり、必要に応じて変更を加えたりできるようになるほか、修正案を報告してメインライン コードの改善に貢献することができます。
開発者プレビュー版 AAL のリリースにより、Windows Azure AD を最大活用するためのツール群の整備が一段階進みましたが、完成に至るにはまだ長い道のりがあります。ぜひサンプルや NuGet パッケージをダウンロードして、使用した感想をお聞かせください。
最後になりましたが、貴重な時間を割いて示唆に富んだご意見をお寄せいただいた皆さんに感謝いたします。Windows Azure AD を正しい方向に発展させていくための参考にさせていただきます。
Alex Simons (Active Directory 部門 Program Management 担当ディレクター)