環境 :
Visual Studio 2013 RC
開発者にとっての Azure Active Directory (Microsoft Entra ID)
- Azure Active Directory とは (事前準備)
- Web SSO 開発 – .NET 編 (WS-Fed)
- Web SSO 開発 – PHP, Node.js 編 (SAML) ※英語
- SaaS 連携 : Google Apps (SAML)
- SaaS 連携 : kintone (SAML)
- OpenID Connect サポート (OpenID)
- OAuth による Client の開発 (OAuth)
- OAuth による Service の開発 (OAth)
- Common Consent Framework – Client 側 (OAuth)
- Common Consent Framework – Service 側 (OAuth)
- Application Role の使用 (OAuth)
- Backend Server-Side アプリの開発 (OAuth)
- Federated Credentials (OAuth) ※英語
- Login UI が表示できない場合のフロー (OAuth)
- JavaScript Application の開発 (OAuth)
- Windows 10 との SSO 開発 (Web Account Manager API)
- Active Directory (企業内 Windows 環境) との Federation と同期
- Multi-Factor Authentication
- Graph API
ここでは Visual Studio 2013 を例に解説しています。Visual Studio 2013 では WS-Federation が使用されますが、Visual Studio 2015 以降では OpenID Connect が使用されます。(OWIN のライブラリーが使用されています。)
こんにちは。
今日は、Visual Studio 2013 を使用した Azure Active Directory との連携開発について紹介します。
ASP.NET の Web アプリを作成し、Azure AD を使った認証をおこないます。接続された他の Web アプリがある場合、毎回 ログイン (SignOn) しなおす必要はなく、1 度 SignOn をおこなうと他のアプリも SignOn された状態で使用できる SSO (Single SignOn) の Experience が提供されます。
まず当然ですが、「Azure Active Directory とは (事前準備)」を参照の上、あらかじめ Azure Active Directory の Directory を作成しておいてください。また、全体管理者 (Global Administrator) のユーザーをあらかじめ追加しておいてください。(今回は、Directory のドメインを「tsmatsuzdom01.onmicrosoft.com」と仮定します。)
Visual Studio 2013 を起動して、[ASP.NET Web アプリケーション] のプロジェクトを新規作成します。
すると、プロジェクト作成の際のウィザードで [認証の変更] (Change Authentication) ボタンが表示されるので、このボタンを押します。
つぎに表示されるダイアログ ボックスで、[組織アカウント] (Organization Account) を選択します。(「組織アカウント」とは「Azure Active Directory または Windows Server Active Directory のアカウント」を意味しています。)
また下図の通り、右ペインのドメインに、あらかじめ準備しておいた Directory のドメイン (今回の場合は「tsmatsuzdom01.onmicrosoft.com」) を入力しておきます。
例えば、この Web アプリケーション (サーバー側) から Azure Active Directory Graph (Graph API) にアクセスする場合、下図の [アクセス レベル] (Access Level) を使って権限を指定できます。例えば、アプリケーションでユーザー一覧を表示する場合には、下図のようにディレクトリ データの読み込みも可能なように構成できます。
上記の設定が完了したら、プロジェクトの新規作成を実行します。
この際、内部で以下の 2 つの設定がおこなわれます。また、Azure Active Directory へのログインが必要となりますが、この際、上記で準備しておいた全体管理者 (Global Administrator) のユーザーでログインしてください。(Microsoft Account は NG です。)
- Azure AD へのアプリケーション登録 :
本来の手順は、あらかじめ、Azure Portal などを使って Azure Active Directory (指定した Directory) へ Application (Service Principal) を登録し (アプリケーションの URL なども設定します)、登録時に発行される Id (Client Id) などの情報を使って Web アプリケーション側を構成します。しかし、上記の Visual Studio を使用した手順によって、自動で Azure AD への Application 登録がおこなわれます。(上述のアクセス レベルも設定されます) - Web アプリケーションへのコードの追加 :
作成した Web アプリケーションへのシングル・サインオン (SSO) のためのコードが記述されます。コードの内容は、主に Web.config に対する設定です。(作成されたアプリケーションの Web.config を開いて確認してみてください。)
既定ではページを表示する際に Azure Active Directory に強制的にリダイレクトされる設定になっていますが、こうした細かな設定の変更や、ユーザー属性 (クレーム) を使ったアプリケーション独自な処理などは、開発者 (プログラマー) 自身が、Web.config 編集やロジック コードを記述するなどして対応します。
例えば、プロジェクトの作成後に Windows PowerShell を使って Azure Active Directory の Directory を確認すると、下記の通り Service Principal が作成されています。(PowerShell Cmdlet の使用方法については「Azure Active Directory とは (事前準備)」を参照してください。)
PS > Get-MsolServicePrincipal -All. . .ExtensionData : System.Runtime.Serialization.ExtensionDataObjectAccountEnabled: TrueAddresses : {Microsoft.Online.Administration.RedirectUri}AppPrincipalId: e6aa0b6d-6acd-4117-ab88-98bb32219affDisplayName : WebApplication1ObjectId : 331470de-ca9c-4885-9a93-47d1d534127eServicePrincipalNames : {https://tsmatsuzdom01.onmicrosoft.com/WebApplication1, e6aa0b6d-6acd-4117-ab88-98bb32219aff}TrustedForDelegation : False
なお、上記の Addresses には、ちゃんと、このアプリケーションのアドレスが登録されています。
PS> $sp = Get-MsolServicePrincipal -AppPrincipalId e6aa0b6d-6acd-4117-ab88-98bb32219affPS> echo $sp.AddressesExtensionData Address ...------------- -------System.Runtime.Serializ... https://localhost:44300/ ...
Azure ポータル上でも、Active Directory のアプリケーションを確認すると、下図の通り表示されます。
また、この作成したプロジェクトを Visual Studio を使って Azure Web App (旧 Azure WebSite) に発行 (配置) すると、新しい Application (Service Principal) も自動的に登録されます。この場合も、全体管理者でのログインを要求されます。(もちろん、ftp や git を使って自身で発行した場合は自動設定されませんので、自身で設定をおこなってください。)
補足 (追記) : Visual Studio 2013 のプロジェクト テンプレートでは、Azure Active Directory (Azure AD) と連携している Directory (Tenant) の情報をデータベース (SQL Server) に保持しており、動的に Directory (Tenant) に Consent (sign up) してデータベースに保持する multi-tenant 対応の Web アプリケーションを簡単に構築できるようになっています。
このため、プロジェクトを Azure に発行する際は、発行時にデータベース接続文字列 (DefaultConnection) を SQL Database のデータベースに変更しておいてください。(この構成をおこなわないと、Azure 発行後にエラーが発生して、動作しません。)
Web アプリケーション内では、氏名、メールアドレスなどのユーザー属性 (クレーム) を参照できます。
[Authorize]public ActionResult Test(){ ClaimsPrincipal principal = HttpContext.User as ClaimsPrincipal; string res = ""; foreach (var claim in principal.Claims) {res += claim.Type + "=" + claim.Value + "<br>"; } ViewBag.Message = res; return View();}
その他にも、ログイン ボタンなどを設けてオンデマンドにログインをおこなう (既定では、ページを表示する際に Azure Active Directory に強制的にリダイレクトされます) など、応用的なプログラミングが可能です。詳細については、以前投稿した「Azure Active Directory の SSO 開発 (Identity and Access Tool 編)」で紹介していますので参考にしてください。
※ 変更履歴 :
2017/05/26 画面を新ポータル (https://portal.azure.com) に変更
Categories: Uncategorized
7 replies»