こんにちは。CData Software Japan リードエンジニアの杉本です。
Dynamics 365 や Dataflex(CDS)の Web API にアクセスする時、地味にツライのはログインアカウントと紐付けられることではないでしょうか?
特にユーザー依存がなく、組織的なバッチ処理の仕組みやデーモンを動かす場合、OAuth によるログインプロセスとそのログインユーザーへの依存は、難しい点があります。
そんな Dynamics 365・Dataflex(CDS)の Web API ですが、ちゃんと回避方法があります。
それが OAuth 2.0 フローの一つである、ClientCredentialsによるTokenの取得方法です。
そんなClientCredentials によるTokenの取得方法が最新の CData Dynamics 365 ・Dataflex(CDS)Driverで対応しました!
https://www.cdata.com/jp/drivers/microsoftcds/
https://www.cdata.com/jp/drivers/d365sales/
すごく便利な機能なのですが、環境側の事前準備がちょっと大変なので、この記事で細かな手順を紹介したいと思います。
ちなみに、Office365(現在はMicrosoft 365ですね)Driverでは対応済みです。
手順
それでは手順を紹介していきましょう。
必要なもの
今回はDataflex(CDS)を対象として環境構成を行ってみました。Dynamics 365 でも手順はほぼ同じです。
CData Dataflex(CDS)DriverはODBCでもJDBCでもなんでもかまいません。今回は設定画面がわかりやすいように、ODBCを使いました。
https://www.cdata.com/jp/drivers/microsoftcds/odbc/
1. アプリの登録
何はともあれ、まずは Azure ADにアプリを登録しましょう。基本的な手順は今までの記事に書いてあるのと一緒です。
Azure Active Directory 管理センターに移動し、「アプリの登録」→「+新規登録」をクリック。
任意のアプリケーション名を入力して、シングルテナントアプリケーションとして作成します。リダイレクトURIはローカルホストでかまいません。今回は特に使うシチュエーションがないためです。
アプリを作成したら、クライアントIDを控えておきます。
次に、「証明書とシークレット」の画面に移動して、クライアントシークレットを作成します。任意の名称と有効期間で登録し
生成されたクライアントシークレットを同じように控えておきます。
最後にAPIのアクセス許可を設定します。
Dataflex(CDS)の場合は「PowerApps Runtime Service」、Dynamics 365 Salesの場合は「Dynamics CRM」を付与します。(なお、Dataflex(CDS)も内部的には Dynamics 365 APIが利用できるので、Dynamics CRMの権限でも大丈夫です。)
ここでちょっと注意なのですが、今回はClientCredentials で行うため、Graph APIの文脈で行くと「アプリケーションの許可」になるのですが、PowerApps/Dataflex(CDS)の性質上、それが使えません。そのため、「委任されたアクセス許可」を付与してあげます。
2. PowerApps・Dataflex(CDS)側 アプリ認証用ユーザーの作成
次にこのアプリ認証用のためだけのユーザーというものを作成します。このユーザーを先ほど作成したAzure ADアプリと紐づけることで、OAuth ClientCredentials 時に明示的なユーザーを指定しなくても、アクセスができるようになります。
まず、PowerAppsのDataflex(CDS)環境にアクセスし、設定アイコンから「詳細設定」の画面に移動します。
私の環境が英語版で作ってしまったので英語ですが、日本語でもあまりかわらないです。設定一覧から「セキュリティ」に移動し
ユーザーをクリックします。
さて、ここでユーザーを作成するのですが、単純に「+新規」ボタンをクリックしてはいけません。
ここ「重要!」です。必ずビューの一覧から「アプリケーション ユーザー」を選択してください。
「アプリケーション ユーザー」を選択した後に「+新規」をクリックすることで新規作成画面に移動できます。
さらに、移動した後も気が抜けません。必ずフォームを「アプリケーション ユーザー」に切り替えてください。
これで初めてアプリケーション ユーザーの作成を行うことができるようになります。
この画面では、「UserName」「Applicaiton Id」「FullName」「PrimaryEmail」の4種類の項目を設定しますが、「Applicaiton Id」以外は自由に指定して大丈夫です。
「Applicaiton Id」のみ、先ほど作成したAzure ADアプリのClientIdを指定する必要があります。これを以下のように入力したら、保存をクリックします。
保存した後、仕上げにこのユーザーに対してセキュリティロールを設定します。これがAPIアクセス時におけるアクセス許可範囲に相当します。今回はあまり気にせずSystemAdminを付与しました。
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」を指定します。
Organization URLはPower Platform 管理センターでも確認できます。
「接続テスト」をクリックして、以下のように表示されればOKです。通常行われるOAuthのログインプロセスが無いのがわかりますね。
あとはPowerBIやVisual Studioなど、任意のツールからアクセスできます。