Dynamics CRM 2013/Fall '13 SDK モバイルおよびリッチ クライアントの開発 その 2 - 認証(オンライン)

みなさん、こんにちは。

前回に引き続き Microsoft Dynamics CRM 2013 および、Microsoft
Dynamics CRM Online Fall '13 新機能より、モバイルおよびリッチ
クライアントの開発に関する情報をお届けします。

Dynamics CRM 2013/Fall '13 SDK モバイルおよびリッチ クライアントの開発 その 1

前回は概要とサンプルの実行方法を紹介しましたが、今回は認証
に関する情報をお届けします。

新たな認証方式のサポート

Microsoft Dynamics CRM 2011 では Windows 統合認証とクレーム
認証をサポートしていました。このモデルはブラウザやマネージド
アプリケーションでは十分に機能していましたが、非ドメイン環境
で Windows Identify Foundation (WIF) SDK を利用できない場合の
開発が困難でした。

そのため Microsoft Dynamics CRM 2013 と Microsoft Dynamics CRM
Online Fall '13 では新しい認証として OAuth 2.0 をサポートします。
尚、設置型環境では AD FS 2.2 (Windows Server 2012 R2) および IFD
構成が必須となります。

設置型とオンライン環境で手順が異なるため、今回はオンラインに
絞って詳細を解説します。

オンライン環境の認証基盤

Microsoft Dynamics CRM Online では、ユーザー認証に Azure AD を
使用しています。ユーザーを管理する場合 Office 365 のポータルを
利用している方は疑問に思われるかもしれませんが、実際は以下の
流れとなります。

1. Microsoft Dynamics CRM Online または Office 365 のサービスに
サインアップします。この際利用するドメイン名を指定します。

2. 指定したドメインと同じドメイン名を利用して Azure AD が作成
されます。

3. Office 365 管理ポータルで追加、変更したユーザー情報は、裏で
Azure AD に格納されます。

Windows Azure のサブスクリプションがある場合は、実際に Azure
ポータルからもドメインとユーザーが確認可能です。

[Office 365 管理ポータル]
image

[Azure ポータル ‐ Azure AD ドメイン一覧]
image

[Azure ポータル ‐ Azure AD ユーザー]
image

アプリケーションの登録

各種サービスやアプリケーションから Azure AD を利用するには
事前に登録しておく必要があります。Microsoft Dynamics CRM
Online や Office 365 をサインアップした場合、自動的にサービス
が登録されます。

image

また、サンプルプログラムから Microsoft Dynamics CRM Online
のデータを取得するためにも、ここでアプリケーションの登録
を行う必要がありますが、通常 Azure のサブスクリプションは
持っていないため、Azure 管理ポータルは利用できません。

そこで Graph Explorer というツールを利用してアプリケーション
を登録することになります。手順は前回の記事で紹介しましたが
今回はその他の使い方や詳細も紹介します。

1. https://graphexplorer.cloudapp.net/ に接続し、管理者権限で
サインインします。

2. Resource のアドレスからテナントが正しいことを確認して
Get ボタンをクリックします。

image

3. 一番上の users をクリックします。Azure AD よりユーザー
情報が取得できます。例えば assignedPlans ではライセンスが
付与されているサービスが確認できます。

image

4. 1 つ前の画面に戻って /applicationsリンクをクリックする事で
登録しているアプリケーションが確認できます。

5. 画面上部の Add Application Permission をクリックしてサンプル
アプリケーションの登録をします。この画面では Client App Display
Name と Client App URL でアプリケーションの情報を登録できます。
またこのアプリケーションが利用できるサービスを指定します。

尚、Windows ストアアプリケーションの Client App URL は以下の
コードで取得が可能です。

string redirectUrl = WebAuthenticationBroker.GetCurrentApplicationCallbackUri().ToString();

Windows Azure Authentication Library (AAL)

AAL を利用することで、Azure AD を利用したアプリケーションの
開発が容易になります。

AAL では以下の流れでユーザーの認証から取得したトークンの利用
が可能になります。

1. 認証サービスを指定することで認証コンテキストを取得します。
Azure AD の場合は https://login.windows.net/common/wsfed です。

_authenticationContext = new AuthenticationContext(_oauthUrl);

2. 取得したコンテキストの AcquireTokenAsync メソッドを実行し
トークンを取得します。この際に登録済の ClientId および利用する
サービスの名前を指定します。Microsoft Dynamics CRM Online
の場合は、Microsoft.CRM です。

AuthenticationResult result =
await _authenticationContext.AcquireTokenAsync("Microsoft.CRM", _clientID);

3. HttpClient のヘッダーとして取得したトークンを設定します。

// HttpClient の生成
HttpClient httpClient = new HttpClient();
// ヘッダーにトークンを設定
httpClient.DefaultRequestHeaders.Authorization = 
  new AuthenticationHeaderValue("Bearer", accessToken);
// HttpRequest を生成
HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Get, url);
req.Method = HttpMethod.Get;

// HttpResponse を生成
HttpResponseMessage response;
// 結果を取得
response = await httpClient.SendAsync(req);

まとめ

新しい認証方式をサポートしたことで、これまで意識する必要のなかった
Azure AD やアプリケーション登録、JWT というキーワードが増えました。
初めは構成にうまくいかない問題など出ると思いますが、繰り返し試して
いただくことで手順が確かなものになりますので、是非お試しください。

- 中村 憲一郎