【Dynamics CRM】【Azure】Dynamics CRMのPluginでAzure ADの認証を通してみた
Dynamics CRMではWeb APIとして、Azure ADの認証を通ることでアクセスできるAPIが提供されていますが、ほかのOffice365アプリケーションでもいろいろと提供されています。
Office 365 API リファレンス
https://msdn.microsoft.com/ja-jp/office/office365/howto/rest-api-overview
ASP.NETやブラウザベースのJavaScriptを用いたアプリケーションであれば、ADALなどのライブラリが提供されていますが、そういったライブラリが単純に利用できないDynamics CRM OnlineのPluginではちょいと実装が面倒になります。
というわけで、実直にHTTP Requestを組んで、Dynamics CRMのPluginからAzure ADのTokenをもらってみようというのが、今回の記事になります。
今回のアプローチ
今回Azure ADのoAuth認証を通すためのグラント種別としてはClient Credentials、Plugin内部に保持したUserIDとPasswordを用いて、Azure ADのAccessTokenを取得します。
Pluginではバッチ処理のアプリケーションなどと同様に、UIが提供されませんので、Implicit FlowのようにAzure ADのサインイン画面をユーザーに提供することができません。
そのため、取れるアプローチとしては、ClientID・UserID・Pawwrodを用いたgrant_type=password
もしくはClientID・ClientSecretを用いたgrant_type=client_credentialsになります。
grant_type=client_credentialsは試行錯誤中のため、保留。(認証が通らない。。。resourceが無効?)
いったん、アプローチがわかりやすい、grant_type=passwordを実装してみました。
ただ、まあ、やってみたものの、Plugin(ないしDynamics CRM内部)にIDとパスワードを保持しなければいけない側面がありますので、ご利用は計画的にする必要があるかと思います。
事前準備
あらかじめAzure ADのアプリケーション登録を行って、Client IDとresourceへのアクセス許可を行っておきましょう。 アプリケーションの種類は「ネイティブ クライアント アプリケーション」です。
今回はSharePoint連携を想定して、アプリケーションのアクセス許可を構成してみました。
コード
今回はTokenの取得だけ。
とりあえずInvalidPluginExecutionExceptionで画面に表示させています。