Windows Azure Active Directory を使用した認証アプリ ASP.NET MVC
この記事は、Windows Azure Advent Calendar 2013 14 日目の記事です。
Visual Studio 2013 では、Windows Azure Active Directory(以降 WAAD)を使用した認証アプリを作成するための、プロジェクトテンプレートが用意されています。ドメインを入力すれば、認証を利用する実装コードが生成されます。
ASP.NET MVC で作成すると、ログイン機能を含めて試すことができます。
ということでこの記事では、Visual Studio 2013 にて WAAD 認証を利用した ASP.NET MVC アプリを作成する手順を記載します。
また、1から始められるよう WAAD のディレクトリを新しく作成するところから始めます。
※Windows Azure アカウントの用意は必要です。
※VS 2012 でも WAAD 認証は可能です。
※ここでは、手順のみ記載しています。ASP.NET と WAAD の連携の詳細情報は、松崎さんのブログ Windows Azure Active Directory と事前準備 から始まるシリーズが大変参考になります。
作成後のアプリ
作成したプロジェクトを起動すると、まずこのような画面がでます。https でデバッグが行われます。
サイト閲覧の続行を行うと、サインイン画面が表示されます。
WAAD に登録しているアカウント情報を入力すると、おなじみのスタートページが表示されます。
右上には、現在ログイン中のユーザー情報が表示されています。
もちろん、サインアウトも行うことができます。
それでは、アプリ作成の手順を書いていきます。(ただいまアジェンダのみ)
WAAD ディレクトリの作成
Azure のポータルサイトにログインし、「Active Directory」タブを選択し、「新規」をクリックします。
(※既にディレクトリが用意されているかもしれません。既存のディレクトリを利用する場合は、新た作成する必要はありません。)
飛び出してきたセクションにて「ディレクトリ」→「カスタム作成」をクリックします。
ダイアログでは、下の様に選択します。「名前」は一意の値になるよう任意の値を入力します。
ここでの「ドメイン」xxxxx.onmicrosoft.com は、後のプロジェクト作成で必要になります。
ディレクトリの作成は以上です。
ユーザーの作成
作成した(もしくは既存の)ディレクトリにユーザーを追加します。
ディレクトリの管理画面で「ユーザー」、「ユーザーの追加」をクリックします。
表示されるダイアログで、「ユーザーの種類」を組織内の新しいユーザー、「ユーザー名」を任意の値にし、次にすすみます。ここでの「ユーザー名」は後ほど使用します。
プロファイルに任意の値を入力します。「ロール」は必ず「全体管理者」を選択します。
「作成」をクリックすると、一時パスワードが表示されます。このパスワードも後で使用します。
ユーザーの作成は以上です。
これまでの作業で、「ドメイン」「ユーザー名」「パスワード」の3つを用意できました。これらは次のプロジェクト作成にて使用します。
プロジェクトの作成
Visual Studio 2013 を開き、ファイル>新規作成>プロジェクトで、「ASP.NET Web アプリケーション」を選択します。(.NET Framework は 4.5 以上にします。)
「MVC」を選択し、「認証の変更」をクリックします。
左側で「組織アカウント」を選択し、「ドメイン」を入力します。(Azure ポータル側で入力したドメインです)
ユーザー情報の入力を求められるので、Azure ポータル側で作成したユーザーの「ユーザー名」と「パスワード」を入力します。パスワードの変更が求められた場合は、案内に従って変更をおこないます。
認証が終わると、先ほどのダイアログに戻りますので「OK」を押します。
プロジェクトを作成中に「組織認証を有効にする」というメッセージが表示されるかと思います。
恐らくこのときに、WAAD のディレクトリに今作成しているプロジェクトをアプリケーションとして登録しています。
プロジェクトの作成は以上です。
F5 でデバッグを行うと、ログイン画面が表示され、作成したユーザーのアカウントでログインを行うことができます。
エラーがでる場合
作業中、2つのエラーに遭遇したので記録しておきます。
エラー1
アカウント承認時に「An error occurred while processing this request」というアラートがでる場合は、アカウントのユーザー名が「@xxxx.onmicrosoft.com」で終わるものかどうか確認します。(マイクロソフト等のアカウントは利用できません。新しくユーザーを作成して試します。)
エラー2
他、プロジェクト作成時に「Authorization_RequestDenied: Insufficient privileges to complete
the operation」というアラートが出る場合があります。原因は分からないのですが、「アプリケーション」の登録を一度も行ったことがない場合にでるかもしれません。同じ方がいらっしゃる様子→Authorization_RequestDenied when creating new ASP.NET project using Organization Account
一度、適当にアプリケーションの登録行為を行ってみるとエラーが出なくなる、と推測しています。
簡単な手順を書いておきますので、エラーがでる場合は試してみてください。
・Azure ポータルの作成したディレクトリにて「アプリケーション」>「追加」を選択
・「組織で開発中のアプリケーションを追加」を選択
・名前は適当に入力します。
・種類は「WEB アプリケーションや WebAPI」を選択します。
・「アプリケーションのURL」「アプリケーション ID/URI」は、適当に「https://localhost」を入力します
・「シングルサインオン」を選択します。
以上です。この操作の後、もう一度プロジェクトを試してみてください。
(今後は、プロジェクト作成時にアプリケーションの登録作業を行ってくれるはずです。)
参考
- Windows Azure Active Directory 連携開発 (Visual Studio 2013 編)
- Windows Azure AD と Microsoft OWIN コンポーネントで ASP.NET Web API をセキュリティ保護する
- ASP.NET Web API でプロジェクトを作成する場合の記事です。ASP.NET Web API は OWIN コンポーネントを利用しています。また、Web API を呼び出すためのクライアントは自分で用意する必要があります。
- Adding Sign-On to Your Web Application Using Windows Azure AD
- VS2012 で同様のことを行う場合の記事です。