MSGraphClientV3 を使用して Microsoft Graph に接続する

SharePoint Framework ソリューションをビルドする場合は、MSGraphClientV3 を使用して Microsoft Graph に簡単に接続できます。

MSGraphClient の概要

MSGraphClientV3 は、SharePoint Framework v1.15.0 で導入された新しい HTTP クライアントであり、SharePoint Framework ソリューション内の Microsoft Graph への接続を簡略化します。 MSGraphClientV3 は Microsoft Graph JavaScript クライアント ライブラリ v3 をラップし、他のクライアント側ソリューションでクライアント ライブラリを使用する場合と同じ機能を開発者に提供します。

MSGraphClientV3 は、SharePoint Framework v1.6.0 で導入された MSGraphClient を置き換えます。 MSGraphClient は 、Microsoft Graph JavaScript クライアント ライブラリ v1 をラップしました。

ソリューションで Microsoft Graph JavaScript クライアント ライブラリを直接使用することもできますが、 MSGraphClientV3 は Microsoft Graph に対する認証を処理します。これにより、ソリューションの構築に集中できます。

ソリューションで MSGraphClient を使う

注:

MSGraphClientV3 は、SharePoint Framework v1.15.0 以降を使用してビルドされたプロジェクトでのみ使用できます。 MSGraphClientV3 は、クライアント側の Web パーツを使用してこの記事で説明しますが、SharePoint Framework拡張機能でも使用できます。

注:

MSGraphClientV3 のシングル サインオンは、現在 SharePoint Online でのみ使用できます。 クライアントをオンプレミス開発に活用することはできますが、ユーザーは Web パーツ内で再度サインインするように要求されます。

  1. SharePoint Framework ソリューションで MSGraphClientV3 を使用するには、メイン Web パーツ ファイルに次importの句を追加します。

    import { MSGraphClientV3 } from '@microsoft/sp-http';
    
  2. MSGraphClientV3 は、Web パーツ コンテキストで使用できる MSGraphClientFactory を介して公開されます。 MSGraphClient への参照を取得するには、コードに以下を追加します。

    export default class HelloWorldWebPart extends BaseClientSideWebPart<IHelloWorldWebPartProps> {
      public render(): void {
        // ...
    
        this.context.msGraphClientFactory
          .getClient('3')
          .then((client: MSGraphClientV3): void => {
            // use MSGraphClient here
          });
      }
    
      // ...
    }
    
  3. MSGraphClientV3 インスタンスへの参照を取得したら、JavaScript クライアント ライブラリ構文を使用して Microsoft Graph との通信を開始します。

    export default class HelloWorldWebPart extends BaseClientSideWebPart<IHelloWorldWebPartProps> {
      public render(): void {
        // ...
    
        this.context.msGraphClientFactory
          .getClient('3')
          .then((client: MSGraphClientV3): void => {
            // get information about the current user from the Microsoft Graph
            client
              .api('/me')
              .get((error, response: any, rawResponse?: any) => {
                // handle the response
            });
          });
      }
    
      // ...
    }
    

Microsoft Graph TypeScript 型を使用する

Microsoft Graph と TypeScript を使って作業すると、コードのエラーをすばやく把握するのに役立つ Microsoft Graph TypeScript 型を利用することができます。 Microsoft Graph TypeScript 型は、別のパッケージとして提供されます。

  1. Microsoft Graph TypeScript 型をインストールする:

    npm install @microsoft/microsoft-graph-types --save-dev
    
  2. プロジェクトにパッケージをインストールしたら、そのパッケージを Web パーツ ファイルにインポートします。

    import * as MicrosoftGraph from '@microsoft/microsoft-graph-types';
    
  3. 次のように、Microsoft Graph から取得したオブジェクトを入力します。

    export default class HelloWorldWebPart extends BaseClientSideWebPart<IHelloWorldWebPartProps> {
      public render(): void {
        // ...
    
        this.context.msGraphClientFactory
          .getClient('3')
          .then((client: MSGraphClientV3): void => {
            // get information about the current user from the Microsoft Graph
            client
              .api('/me')
              .get((error: any, user: MicrosoftGraph.User, rawResponse?: any) => {
                // handle the response
            });
          });
      }
    
      // ...
    }
    

使用可能なアクセス許可のスコープ

既定のサービス プリンシパルでは、Microsoft Graph への明示的なアクセス許可は付与されていません。 ただし、Microsoft Graph へのアクセス トークンを要求すると、user_impersonation のアクセス許可スコープを含むトークンを取得することができ、これを使ってユーザーに関する情報を読み取ることができます (つまり、User.Read.All)。

追加のアクセス許可スコープを、開発者が要求し、テナント管理者から付与してもらうことができます。 詳細については、「SharePoint Framework ソリューションでの Azure AD でセキュリティ保護された API への接続」を参照してください。

既知の問題

Azure AD の役割と代理認証

MSGraphClient は、現在、Microsoft Graph の代理アクセス許可の要求時に暗黙的な認証フローを使用しています。 Microsoft ID プラットフォーム アクセス トークン に示されているように、このwids要求は、長さの問題のため、暗黙的な承認フローを使用する場合は存在しない可能性があります。 このwids要求には、委任されたユーザーに割り当てられた Azure AD テナント全体の役割の一覧が含まれます。

その結果、Azure AD の役割に依存している Microsoft Graph エンドポイントおよび代理アクセス許可に対するクエリは、wids要求が存在しないことが原因で失敗する可能性があります。 これを書いている時点で、次のエンドポイントが含まれます。

関連項目