CData Software Blog

クラウド連携のCData Software の技術ブログです。

Dynamics 365 Sales & Dataflex(CDS) Driver でブラウザログインが不要な ClientCredentials に対応しました

f:id:sugimomoto:20200726140458p:plain

こんにちは。CData Software Japan リードエンジニアの杉本です。

Dynamics 365 や Dataflex(CDS)の Web API にアクセスする時、地味にツライのはログインアカウントと紐付けられることではないでしょうか?

特にユーザー依存がなく、組織的なバッチ処理の仕組みやデーモンを動かす場合、OAuth によるログインプロセスとそのログインユーザーへの依存は、難しい点があります。

そんな Dynamics 365・Dataflex(CDS)の Web API ですが、ちゃんと回避方法があります。

それが OAuth 2.0 フローの一つである、ClientCredentialsによるTokenの取得方法です。

kageura.hatenadiary.jp

そんなClientCredentials によるTokenの取得方法が最新の CData Dynamics 365 ・Dataflex(CDS)Driverで対応しました!

https://www.cdata.com/jp/drivers/microsoftcds/

f:id:sugimomoto:20200726140513p:plain

https://www.cdata.com/jp/drivers/d365sales/

f:id:sugimomoto:20200726140551p:plain

すごく便利な機能なのですが、環境側の事前準備がちょっと大変なので、この記事で細かな手順を紹介したいと思います。

ちなみに、Office365(現在はMicrosoft 365ですね)Driverでは対応済みです。

www.cdatablog.jp

手順

それでは手順を紹介していきましょう。

必要なもの

今回はDataflex(CDS)を対象として環境構成を行ってみました。Dynamics 365 でも手順はほぼ同じです。

  • PowerApps・Dataflex(CDS)が利用できるアカウント
  • CData CDS Driver

CData Dataflex(CDS)DriverはODBCでもJDBCでもなんでもかまいません。今回は設定画面がわかりやすいように、ODBCを使いました。

https://www.cdata.com/jp/drivers/microsoftcds/odbc/

1. アプリの登録

何はともあれ、まずは Azure ADにアプリを登録しましょう。基本的な手順は今までの記事に書いてあるのと一緒です。

Azure Active Directory 管理センターに移動し、「アプリの登録」→「+新規登録」をクリック。

f:id:sugimomoto:20191014223210p:plain

任意のアプリケーション名を入力して、シングルテナントアプリケーションとして作成します。リダイレクトURIはローカルホストでかまいません。今回は特に使うシチュエーションがないためです。

f:id:sugimomoto:20191014223215p:plain

アプリを作成したら、クライアントIDを控えておきます。

f:id:sugimomoto:20191014223221p:plain

次に、「証明書とシークレット」の画面に移動して、クライアントシークレットを作成します。任意の名称と有効期間で登録し

f:id:sugimomoto:20191014223230p:plain

生成されたクライアントシークレットを同じように控えておきます。

f:id:sugimomoto:20191014223236p:plain

最後にAPIのアクセス許可を設定します。

f:id:sugimomoto:20191014223244p:plain

Dataflex(CDS)の場合は「PowerApps Runtime Service」、Dynamics 365 Salesの場合は「Dynamics CRM」を付与します。(なお、Dataflex(CDS)も内部的には Dynamics 365 APIが利用できるので、Dynamics CRMの権限でも大丈夫です。)

f:id:sugimomoto:20200726140248p:plain

f:id:sugimomoto:20191014223252p:plain

ここでちょっと注意なのですが、今回はClientCredentials で行うため、Graph APIの文脈で行くと「アプリケーションの許可」になるのですが、PowerApps/Dataflex(CDS)の性質上、それが使えません。そのため、「委任されたアクセス許可」を付与してあげます。

f:id:sugimomoto:20191014223259p:plain

2. PowerApps・Dataflex(CDS)側 アプリ認証用ユーザーの作成

次にこのアプリ認証用のためだけのユーザーというものを作成します。このユーザーを先ほど作成したAzure ADアプリと紐づけることで、OAuth ClientCredentials 時に明示的なユーザーを指定しなくても、アクセスができるようになります。

まず、PowerAppsのDataflex(CDS)環境にアクセスし、設定アイコンから「詳細設定」の画面に移動します。

f:id:sugimomoto:20191014223306p:plain

私の環境が英語版で作ってしまったので英語ですが、日本語でもあまりかわらないです。設定一覧から「セキュリティ」に移動し

f:id:sugimomoto:20191014223313p:plain

ユーザーをクリックします。

f:id:sugimomoto:20191014223319p:plain

さて、ここでユーザーを作成するのですが、単純に「+新規」ボタンをクリックしてはいけません。

ここ「重要!」です。必ずビューの一覧から「アプリケーション ユーザー」を選択してください。

f:id:sugimomoto:20191014223324p:plain

「アプリケーション ユーザー」を選択した後に「+新規」をクリックすることで新規作成画面に移動できます。

f:id:sugimomoto:20191014223331p:plain

さらに、移動した後も気が抜けません。必ずフォームを「アプリケーション ユーザー」に切り替えてください。

f:id:sugimomoto:20191014223336p:plain

これで初めてアプリケーション ユーザーの作成を行うことができるようになります。

f:id:sugimomoto:20191014223342p:plain

この画面では、「UserName」「Applicaiton Id」「FullName」「PrimaryEmail」の4種類の項目を設定しますが、「Applicaiton Id」以外は自由に指定して大丈夫です。

「Applicaiton Id」のみ、先ほど作成したAzure ADアプリのClientIdを指定する必要があります。これを以下のように入力したら、保存をクリックします。

f:id:sugimomoto:20191014223348p:plain

保存した後、仕上げにこのユーザーに対してセキュリティロールを設定します。これがAPIアクセス時におけるアクセス許可範囲に相当します。今回はあまり気にせずSystemAdminを付与しました。

f:id:sugimomoto:20191014223354p:plain

CData CDS Driverで接続設定を行う

最後に、CData CDS Driverで接続設定を行います。

ClientCredentialsの場合は、以下の5つが最低限必要な設定項目です。

  • Organization URL:接続先のDataflex(CDS)のテナントURLを指定します。(例:https://XXXX.crm7.dynamics.com/
  • Tenant:接続先のMicrosoft 365テナントを指定します。(例:XXXX.onmicrosoft.com
  • OAuth Client Id:Azure ADに登録したアプリのアプリケーションIDを指定します。(例:c5197f7c-f159-4948-885a-74a11da873e4
  • OAuth Client Secret:Azure ADに登録したアプリのクライアントシークレットを指定します。(例:t7HA~_B~E8Lhoi3Ib.7NS6j_78-YQruid3
  • OAuth Grant Type:ClientCredentialsでは「CLIENT」を指定します。

f:id:sugimomoto:20200726140256p:plain

Organization URLはPower Platform 管理センターでも確認できます。

f:id:sugimomoto:20200726140302p:plain

「接続テスト」をクリックして、以下のように表示されればOKです。通常行われるOAuthのログインプロセスが無いのがわかりますね。

f:id:sugimomoto:20200726140308p:plain

あとはPowerBIやVisual Studioなど、任意のツールからアクセスできます。

f:id:sugimomoto:20200726140316p:plain