3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Salesforce から Microsoft Graph API をアクセスする方法

現在私の働いている会社では Salesforce を結構カスタマイズして使っておりまして、いくつかの方法で Salesforce と Sharepoint や Office アプリと連携させています。今回は、そのうちの Salesforce の Apex から Microsoft Graph API をアクセスする方法を紹介したいと思います。例えば Salesforce のレコードページから Excel で帳票を出力したり、Sharepoint 内の Excel ファイルから為替データを取り出したりすることができます。
全体の流れは次のようになります。各種設定が必要ですので、Salesforce のシステム管理者であることと、Microsoft 365 管理センターでアプリケーション登録ができる権限が必要です。あと、今回は Graph API の使い方やアクセス権限についてはご理解いただいている前提で、お話進めさせていいただきます。

  1. Microsoft365 にアプリケーションの登録
  2. Salesforce に Microsoft のサイトを登録
  3. Salesforce に認証プロバイダの登録
  4. Salesforce に指定ログイン情報の登録
  5. Salesforce Apex から Graph API の呼び出し
  6. SFDXと新しい組織作成時の手順

1. Microsoft365 にアプリケーションを登録

  • Microsoft365 管理センターにログインして、左側「管理センター」のメニューから「ID」を選択し Microsoft Entra 管理センターに遷移します。
  • 「ホーム」のページに「テナントID」が表示されていますので控えておきます。

image.png

  • 次に「アプリケーション」「アプリの登録」を選択します
  • 「追加」を選択して「アプリケーションの登録」を行います。ここでは「名前」のみ指定してください。リダイレクト URI は後ほど設定します。仮に「Salesforfce ID Provider」という名前にしておきます。

image.png

登録したアプリケーションを開きます。「アプリケーション(クライアント)ID」は後ほど使いますので控えておいてください。

image.png

左側「証明書とシークレット」を選んで「新しいクライアントシークレット」でクライアントシークレットを作成します。作成したクライアントシークレットの「値」をコピーして控えておいてください。

image.png

必要な GraphAPIのアクセス設定をしてください。下は一例ですが、offline_access と openid は必要なようです。また、管理者の同意が必要なアクセス権の場合は、同意を与える必要があります。下の画面から切れていますが、右側に「状態」という項目があるので、緑色のチェックが付いていることを確認してください。
image.png
これから Salesforce の設定に移りますが、後ほど追加作業がありますのでMicrosoft Entra 管理センター画面はそのまま開いておきます。

2. Salesforce に Microsoft のサイトを登録

Salesforce から外部のサイトにアクセスするには設定が必要です。Salesforce の設定から「セキュリティ」「リモートサイトの設定」を選び、「新規リモートサイト」を作成します。次の2つを登録してください。

3. Salesforce に認証プロバイダの登録

次に Graph API にアクセスするための認証プロバイダを作成します。Salesforce 設定から「ID」「認証プロバイダー」を選び、「新規」ボタンを押します。

image.png

  • プロバイダータイプ:Open ID Connect
  • 名前:ここでは ”GraphAPI接続” としておきます
  • URL接尾辞:ここでは “GraphAPI” としておきます
  • コンシューマ鍵:先ほど控えた「アプリケーション(クライアント)ID」を指定します
  • コンシューマの秘密:先ほど控えたクライアントシークレットの「値」を指定します
  • 承認エンドポイント URL:「テナントID」を先ほど控えたものに置換してください
    https://login.microsoftonline.com/(テナントID)/oauth2/v2.0/authorize
  • トークンエンドポイントURL:
    https://login.microsoftonline.com/(テナントID)/oauth2/v2.0/token
  • ユーザー情報エンドポイントURL:空
  • Proof Key for Code Exchange (PKCE) 拡張を使用:チェック有
  • トークン発行者:空
  • デフォルトの範囲:https://graph.microsoft.com/.default offline_access openid
  • ヘッダーでアクセストークンを送信:チェック有
  • ヘッダーでクライアントログイン情報を送信:チェック無
  • SOAP API応答にコンシューマの秘密鍵を含める:チェック有
  • その他は空欄です

保存すると、下のほうに「Salesforce 設定」というタイトルでURLが4つ表示されます。そのうちの「コールバック URL」を控えてください
image.png

Entra 管理センターに戻って、「認証」から 「Web リダイレクト URI」 に「URIの追加」し、上のコールバック URL を指定します。Salesforce で開発をするとき、本番環境のほかに、サンドボックスやスクラッチ組織を作ると思いますが、Salesforce 組織を作ったときはコールバック URI が変わりますので、都度こちらに追加していきます。

4. Salesforce に指定ログイン情報の登録

Salesforce 設定から「セキュリティ」「指定ログイン情報」を選び、新規のドロップダウンメニューから「新規(従来)」をクリックします。
image.png

  • 表示ラベル:なんでもよいです
  • 名前:ここでは “msgraph” としておきます。Apex からこの名前を参照しますので、控えておきます
  • URL:https://graph.microsoft.com/v1.0
  • 証明書:空
  • ID種別:指定ユーザ
  • 認証プロバイダ:先ほど作成した認証プロバイダを指定します(”GraphAPI接続”)
  • 範囲:空
  • その他デフォルトのままです

保存すると、Graph API へ認証にいき、成功すると認証状況が「認証済み」となります

image.png

5. Salesforce Apex から Graph API の呼び出し

あとは Apex から HttpRequest を送るのですが、Uri は “callout:<指定ログインの名前>” で始まるようになります。その後ろに、指定ログインで指定した URI につづく部分を加えます。
image.png

下は SharePoint 内の Excel ブックにセッションを作成している例です。
image.png

6. SFDXと新しい組織作成時の手順

SFDX をご利用の場合、今回の設定を pull すると、次のようなファイルに保存されます。チェックインする前に、認証プロバイダ (AuthProvider) の を Placefolder のような仮値に変更してくのがよいと思います。
image.png
新しくサンドボックスやスクラッチ組織を作った時、保存しておいた情報を depoly/push すれば今回の接続周りの設定はほぼ再現されますが、次の手順は組織を作るたび必要です:

  • 認証プロバイダの設定から、Placefolder としておいた秘密鍵を設定します (Entra 側のアプリケーションは共通して使えますので、セキュリティ上問題なければ秘密鍵も共通で大丈夫です)
  • コールバック URI は組織毎に異なりますので、都度 Entra 管理画面から URI を追加します
  • 指定ログイン情報を一旦編集モードにして、そのまま保存します。この時、新しい組織の認証が行われます。

本日は以上です。無事 Apex から Graph API にアクセスできましたでしょうか。ご意見ご感想ご指導など、お待ちしております。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?