からめもぶろぐ。

俺たちは雰囲気で OAuth をやっている

SharePoint Online から Dynamics 365 の Web API を実行する

SharePoint ホスト型アドインを使用して SharePoint Online から Dynamics 365 の Web API を実行します。これまでは SharePoint Online から Dynamics 365 に接続するにはプロキシ サーバー経由で実行する方法しかなかったのですが、Dynamics CRM 2016 から REST Web API が強化されたので、いろいろなデータを簡単に取得できるようになりました。

github.com

実行方法

Azure Active Directory アプリケーションの登録

Azure Active Directory にアプリケーションを登録します。

アプリケーションの [応答 URL] に「https://{{開発者向けサイトの URL}}/MyApplication/Pages/WebPart.aspx」を設定します。

アプリケーションのアクセス許可に Dynamics CRM Online を追加します。

今回は Implicit Flow を使うので、アプリケーションのマニフェストを編集し oauth2AllowImplicitFlow を有効にします。


コードの修正

プロジェクトの Scripts/WebPart.js を開き、クライアント ID および Dynamics 365 の接続先の URL を変更します。

var clientId = "{{clientid}}";
var authUrl = "https://login.microsoftonline.com/{{tenantname}}/oauth2/authorize";
var resource = "https://{{tenantname}}.crm.dynamics.com";
var redirectUrl = "https://{{devsiteurl}}/MyApplication/Pages/WebPart.aspx";

開発者向けサイトにアプリを配置します。

アプリ パーツの貼り付け

開発者向けサイトに新しいページを作成し、アプリ パーツを貼り付けます。

Dynamics 365 からデータを取得して取引先企業の一覧を表示します。

まとめ

Dynamics 365 Web API は CORS をサポートしていますので、JavaScript しか記述できない SharePoint ホスト型アドインでも API を実行することができます。また、Dynamics 365 Web API は他の Office 365 API と同じく OAuth によるアクセス許可を行います。SharePoint Online はすでに Office 365 にサインインした状態ですので、その情報を使用してシングル サインオンで Access Token を取得できます。

なお、SharePoint ホスト型アドインはインストール時に一意の URL が作成されるため、Azure Active Directory の応答 URL はアプリの配置ごとに書き換える必要があります。応答 URL が一致しない場合はエラーとなるため注意してください。