Morning Girl

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

【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連携を想定して、アプリケーションのアクセス許可を構成してみました。

f:id:sugimomoto:20161006003814p:plain

f:id:sugimomoto:20161006003819p:plain

コード

今回はTokenの取得だけ。

とりあえずInvalidPluginExecutionExceptionで画面に表示させています。

参考

idmlab.eidentity.jp

blogs.msdn.microsoft.com

blog.karamem0.jp

tech.exceedone.co.jp

www.ipa.go.jp