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

みなさん、こんにちは。

今回はモバイルおよびリッチ クライアントの開発に関して設置型
における設定とサンプルの実行を紹介します。尚、以下の記事の
内容をすでに理解している前提となります。

Dynamics CRM 2013/Fall '13 SDK モバイルおよびリッチ クライアントの開発 その 1 - 概要とサンプル紹介
Dynamics CRM 2013/Fall '13 SDK モバイルおよびリッチ クライアントの開発 その 2 - 認証(オンライン)
Dynamics CRM 2013 IFD 構成における AD FS 2.2 のサポート

設置型の認証基盤

設置型で非ブラウザアプリケーションから OAuth を利用するには
Windows Server 2012 R2 で提供される AD FS 2.2 を使用した IFD
が必須です。AD FS 2.2 の新機能については以下のサイトを参照
してください。(英語)

Active Directory Federation Services Overview
https://technet.microsoft.com/en-US/library/hh831502.aspx

上記サイトでは AD FS 2.1 と 2.2 の機能について紹介しています。

今回直接関連する機能は以下のものです。

Enable developers to build modern applications


ADFS in Windows Server 2012 now supports the OAuth Authorization Grant profile with support for refresh tokens to enable modern applications that use RESTful services. ADFS also supports issuing JWT tokens that are compact tokens that are more amenable to transmit to the resources that use the REST pattern.

サンプルの実行

事前準備

オンライン環境で実施したようなアプリケーションの登録が
設置型でも必要となります。また Microsoft Dynamics CRM
サーバー側の作業も必要となります。

1. 展開サービスがインストールされているサーバーにシステム
管理者権限でログインします。

2. PowerShell を起動します。

3. 以下のコマンドを実行してモジュールを読み込みます。
>Add-PSSnapin Microsoft.Crm.PowerShell

4. 以下のコマンドを実行してOAuth プロバイダを設定します。
※すでにクレーム認証と IFD が構成されている前提です。

>$fedurl = Get-CrmSetting -SettingType ClaimsSettings
>$fedurl.FederationProviderType = 1   
>Set-CrmSetting $fedurl

上記のコマンドでは、まずクレーム設定を取得し、設定に対して
FederationProviderType として 1 を指定しています。これにより
OAuth 認証を利用するようになります。

次に AD FS 2.2 に対してアプリケーションを登録します。

5. AD FS 2.2 サーバーに管理者権限でログインします。

6. PowerShell を開きます。

7. 以下コマンドを実行します。

Add-AdfsClient -ClientId <CLIENT_ID> -Name <APP_NAME> -RedirectUri <REDIRECT_URI>

CLIENT_ID : オンラインと異なり任意の GUID を指定します。ここで
指定したものをサンプル側の ClientID でも使用します。尚、GUID は
Visual Studio のツール | GUID の作成より作成できます。
APP_NAME : 任意のアプリケーション名です。
REDIRECT_URI : 以下コードの戻り値です。詳細はこちら
string redirectUri = WebAuthenticationBroker.GetCurrentApplicationCallbackUri().ToString();

8. Get-AdfsClient コマンドで登録済アプリケーションを確認できます。

以上で準備完了です。

サンプルを利用する

サンプルは SOAP と REST の 2 つ提供されていますが、前回オンライン
向けに書き換えた REST 版のサンプルを設置型向けに再度書き換えて
利用します。手順 2 から 7 までは一度実行している場合スキップ可能です。

1. Visual Studio 2012 でサンプルを開きます。
SDK\SampleCode\CS\ModernAndMobileApps\ModernOdataApp

2. 参照設定を展開して解決できていない参照があるか確認します。

image

3. Azure のライブラリは NuGet で取得できます。ソリューションを
右クリックして NuGet パッケージの復元の有効化をクリックします。

image

4. 確認の画面が出るので「はい」をクリックします。

5. プロジェクトを右クリックして NuGet パッケージの管理をクリック
します。自動的に以下のメッセージが表示されます。復元ボタンを
クリックします。

image

6. 以下の様にパッケージが表示されます。インストールボタンが表示
されている場合はボタンをクリック、アンインストールが表示されて
いる場合はパッケージはインストール済で参照が解決されるだけです
ので、閉じるをクリックします。

image

7. 一旦ソリューションをビルドして参照エラーが解決することを
確認します。

image

8. 次にプロジェクト直下にある CurrentEnvironment.cs を開いて、
クラスメンバーを展開します。

9. CrmServiceUrl を IFD アドレスに書き換えます。手元の環境では
組織が CRM、ドメインが contoso.local のため以下の様にします。

public const string CrmServiceUrl   = “https://crm.contoso.local”;

10. _oauthUrl を以下の様に書き換えます。手元の環境では AD FS 2.2 の
アドレスが adfs.contoso.local ですが、必要に応じて変更してください。

_oauthUrl = "https://adfs.contoso.local/adfs/ls/XRMServices/2011/Organization.svc/web";

11. 58、68 行目の AcuireTokenAsync 第 1 引数を CrmServiceUrl にします。
※オンライン用に変更していない場合は、変更の必要はありません。

await _authenticationContext.AcquireTokenAsync(CrmServiceUrl, _clientID);

12. _clientID 変数にアプリケーション登録で指定した GUID を指定します。

13. F5 キーを押下してサンプルを実行します。

実行イメージは前回と全く同じで、取引先企業とタスクのみが動作します。

まとめ

設置型においてもストアアプリケーションをサポートできることは
多くの企業にとってメリットがあります。弊社純正のクライアント
アプリケーションを利用するのも 1 つの方法ですが、御社の業務に
最適なクライアントを是非開発してください。

- 中村 憲一郎