教程:从 React 单页应用调用 Microsoft Graph API

在能够与单页应用 (SPA) 进行交互之前,我们需要启动对 Microsoft Graph 的 API 调用,并为应用程序创建用户界面 (UI)。 添加后,我们可以登录到此应用程序,并通过 Microsoft Graph API 获取配置文件数据信息。

本教程的内容:

  • 创建对 Microsoft Graph 的 API 调用
  • 为应用程序创建 UI
  • 在应用程序中导入和使用组件
  • 创建用于呈现用户配置文件信息的组件
  • 从应用程序调用 API

先决条件

创建对 Microsoft Graph 的 API 调用

若要允许 SPA 请求访问 Microsoft Graph,需要添加对 graphConfig 对象的引用。 它包含 authConfig.js 文件中定义的Graph REST API 终结点。

  • 在 src 文件夹中,打开 graph.js,将文件内容替换为以下代码片段,以请求访问 Microsoft Graph。
import { graphConfig } from "./authConfig";

/**
 * Attaches a given access token to a MS Graph API call. Returns information about the user
 * @param accessToken 
 */
export async function callMsGraph(accessToken) {
    const headers = new Headers();
    const bearer = `Bearer ${accessToken}`;

    headers.append("Authorization", bearer);

    const options = {
        method: "GET",
        headers: headers
    };

    return fetch(graphConfig.graphMeEndpoint, options)
        .then(response => response.json())
        .catch(error => console.log(error));
}

更新导入以在应用程序中使用组件

以下代码片段将以前创建的 UI 组件导入应用程序。 它还从 @azure/msal-react 包导入所需的组件。 这些组件将用于呈现用户界面和调用 API。

  • 在 src 文件夹中,打开 App.jsx,将文件内容替换为以下代码片段,以请求访问。

      import React, { useState } from 'react';
    
      import { PageLayout } from './components/PageLayout';
      import { loginRequest } from './authConfig';
      import { callMsGraph } from './graph';
      import { ProfileData } from './components/ProfileData';
    
      import { AuthenticatedTemplate, UnauthenticatedTemplate, useMsal } from '@azure/msal-react';
    
      import './App.css';
    
      import Button from 'react-bootstrap/Button';
    

添加 ProfileContent 函数

ProfileContent 函数用于在用户登录后呈现用户的个人资料信息。 当用户选择“请求配置文件信息”按钮时,将调用此函数。

  • App.jsx 文件中,将以下代码添加到你的导入项下面;

    /**
    * Renders information about the signed-in user or a button to retrieve data about the user
    */
    const ProfileContent = () => {
        const { instance, accounts } = useMsal();
        const [graphData, setGraphData] = useState(null);
    
        function RequestProfileData() {
            // Silently acquires an access token which is then attached to a request for MS Graph data
            instance
                .acquireTokenSilent({
                    ...loginRequest,
                    account: accounts[0],
                })
                .then((response) => {
                    callMsGraph(response.accessToken).then((response) => setGraphData(response));
                });
        }
    
        return (
            <>
                <h5 className="card-title">Welcome {accounts[0].name}</h5>
                <br/>
                {graphData ? (
                    <ProfileData graphData={graphData} />
                ) : (
                    <Button variant="secondary" onClick={RequestProfileData}>
                        Request Profile Information
                    </Button>
                )}
            </>
        );
    };
    

添加 MainContent 函数

MainContent 函数用于在用户登录后呈现用户的个人资料信息。 当用户选择“请求配置文件信息”按钮时,将调用此函数。

  • 在 App.jsx 文件中,将 App() 函数替换为以下代码:

    /**
    * If a user is authenticated the ProfileContent component above is rendered. Otherwise a message indicating a user is not authenticated is rendered.
    */
    const MainContent = () => {
        return (
            <div className="App">
                <AuthenticatedTemplate>
                    <ProfileContent />
                </AuthenticatedTemplate>
    
                <UnauthenticatedTemplate>
                    <h5>
                        <center>
                            Please sign-in to see your profile information.
                        </center>
                    </h5>
                </UnauthenticatedTemplate>
            </div>
        );
    };
    
    export default function App() {
        return (
            <PageLayout>
                <center>
                    <MainContent />
                </center>
            </PageLayout>
        );
    }
    

从应用程序调用 Microsoft Graph API

所有需要的代码片段均已添加,因此,现在可以在 Web 浏览器中调用和测试应用程序。

  1. 导航到先前在教程:准备应用程序进行身份验证中打开的浏览器。 如果浏览器已关闭,请通过地址 http://localhost:3000/ 打开一个新窗口。

  2. 选择“登录”按钮。 在本教程中,请选择“使用弹出窗口登录”选项。

    React App 登录窗口的屏幕截图。

  3. 登录选项中显示弹出窗口后,选择要用于登录的帐户。

    请求用户选择要登录的 Microsoft 帐户的屏幕截图。

  4. 此时可能会显示另一个窗口,指示代码将发送到你的电子邮件地址。 如果发生这种情况,请选择“发送代码”。 打开来自发件人 Microsoft 帐户团队的电子邮件,然后输入 7 位数的一次性代码。 输入后,选择“登录”。

    提示用户输入登录验证代码的屏幕截图。

  5. 对于“保持登录状态”,可以选择“”或“”。

    提示用户决定是否保持登录状态的屏幕截图。

  6. 应用现在会请求登录和访问数据的权限。 选择“接受”以继续操作。

    提示用户允许应用访问权限的屏幕截图。

  7. SPA 现在将会显示一个按钮,该按钮上显示“请求配置文件信息”。 选中该按钮即可显示从 Microsoft Graph API 获取的 Microsoft Graph 配置文件数据。

    描述 API 调用结果的 React 应用的屏幕截图。

后续步骤

尝试以下有关如何构建 Web API 的系列教程,了解如何使用 Microsoft 标识平台。