Morning Girl

Web API, Windows, C#, .NET, Dynamics 365/CRM etc..

【Dynamics 365】【8.2新機能】サーバ間(S2S)認証を試してみた

Dynamics 365の開発者向け新機能、Server to Server (S2S)認証を試してみました。

以下のMSDNで手順とともに紹介されています。

サーバー間 (S2S) の認証を使用して Web アプリケーションを作成する

チュートリアル: マルチ テナント型のサーバー間認証の使用

ただ、アプローチがWebアプリケーションベースで書かれており、ちょこっと試すには面倒なので、さくっとS2S認証のキモを確認できるように、記事にしてみました。

なお、バージョンは8.2からしか試せないのでご注意を。

S2S認証の何が嬉しいの?

今までDynamics 365のリソースにアクセスするためには、ID/PW方式(oAuth:Grant Type Password)でしか認証ができず、そのためにはアプリケーション実行用ユーザーとして、Office365・Azure ADのアカウントを一つ作成し、管理してく必要がありました。

それを、Azure ADのアプリケーションと紐付けたDynamics 365上の仮想アプリケーション実行ユーザー(と勝手に名付けました)を作成し、Client ID・Client Secretを用いて認証(oAuth:Grant Type Client Cledential)することを可能にしています。

この際、パスワードやOffice365・Azure AD側のユーザー管理は不要になりますので、Dynamics 365+Azure ADへのアプリケーション登録だけで、動作として完結できる形でリソースへのアクセス権限を提供できるようになります。

検証シナリオ

MSDNにはWebアプリケーションベースで構築するシナリオが記載されていますが、本記事では最低限の設定が把握できるようにコンソールベースのアプリケーションを作成する手順で進めます。

また、認証方式はAzure ADのoAuth2.0 Client Cledentialで行います。

前提条件

・Dynamics 365ライセンス・Office365管理者権限

・Azure サブスクリプション(Azure ADにアクセスできること)

Azure ADへのアプリケーション登録

まず最初にアプリケーション登録を実施します。

Dynamics 365 構成後、Azure ADにアクセスし、「アプリの登録」→「+追加」をクリックします。

f:id:sugimomoto:20170403223449p:plain

アプリケーションの種類をWeb アプリ/APIに設定し、サインオンURLを適当に入力します。

(今回はコンソールのClient Cledentialベースなので適当ですが、実際にWebアプリとして構成する場合適切なサインオンURLを入力してください。)

f:id:sugimomoto:20170403223456p:plain

アプリケーションを構成後、アプリケーションID(Client ID)とキー(Client Secret)を取得します。

キーはすべての設定から「キー」を選択し、任意の名称と有効期限を設定すると生成されます。

f:id:sugimomoto:20170403223501p:plain

これで、Azure AD側の設定は完了です。

Dynamics 365へのアプリケーションユーザー作成

続いて、Client Cledentialで認証をした際に、Resourceへのアクセスを代理するアプリケーションユーザーを作成します。

ここがちょっと今回の手順のミソです。MSDNでも若干わかりづらいので、キャプチャ付きで解説します。

Dynamics 365 のユーザー管理画面に移動して、「アプリケーション ユーザー」ビューに切り替えます。

f:id:sugimomoto:20170403223509p:plain

通常、Dynamics 365 では、Office365側にユーザーの管理を委任しているため、ユーザー作成ができないはずなのですが、このアプリケーション ユーザービューに切り替えることで、ユーザーの作成が可能になります。

f:id:sugimomoto:20170403223516p:plain

新規をクリックすると、アプリケーションユーザー作成画面が表示されます。

(うまく表示されない場合は、フォームを「アプリケーション ユーザー」のフォームに変更してください。)

ここで先程取得した、「アプリケーション ID(Client ID)」と氏名・既定の電子メール(なんでもOK)を入力し保存すると

f:id:sugimomoto:20170403223521p:plain

以下のように、Azure AdのオブジェクトIDなどが取得され、リソースアクセス用のユーザーとして認識されます。

f:id:sugimomoto:20170403223529p:plain

最後に適切なセキュリティロールを割り当てれば、作業完了です。

サンプルコード

あとは、以下のような形で、Client CledentialのアプローチでAzure ADからTokenを取得できるようになります。

所感

MSDNの説明が回りくどいので、少しとっつきづらいのですが、一度試してしまえば、とてもありがたい機能であることが実感できます。

サンプルコードはWeb APIを使用することをベースにしていますが、以下の参考情報先ではSDKにも対応したサンプルコードを紹介しているので、

CRM SDKの認証方式のいち手段として、是非色々と活用したいところですね。

参考情報

crmtipoftheday.com