返回

JavaScript SPA 中使用 MSAL 处理请求/响应负载的终极指南

javascript

在 JavaScript SPA 中使用 MSAL 对请求/响应负载进行处理

问题概述

在使用 Microsoft Entra 和 MSAL 访问外部 REST API 时,我们需要添加处理程序和数据到请求的 JSON 负载中。在 JavaScript SPA 中,如何拦截请求负载并添加这些信息呢?

解决方法

为了在 JavaScript SPA 中使用 MSAL 对请求/响应负载进行处理,我们可以遵循以下步骤:

步骤 1:添加处理程序和数据

首先,需要通过 AcquireTokenSilent()AcquireTokenPopup() 从 MSAL 获取访问令牌。然后,创建一个新的 Fetch 请求对象,并在请求中设置访问令牌为 Authorization 标头。最后,在请求主体中添加所需的处理程序和数据。

步骤 2:拦截请求和响应

下一步是使用 fetch() API 拦截请求。在请求发送之前,添加处理程序和数据。监听请求的响应,在响应到达时提取所需的信息。

代码示例

// 获取访问令牌
const accessToken = await msal.acquireTokenSilent({...});

// 创建 Fetch 请求
const request = new Request('https://example.com/api', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${accessToken}`,
  },
  body: JSON.stringify({
    handler1: 'value1',
    handler2: 'value2',
    // 其他所需数据
  }),
});

// 拦截请求
fetch(request)
  .then((response) => {
    // 处理响应
  })
  .catch((error) => {
    // 处理错误
  });

优点

这种方法具有以下优点:

  • 在 JavaScript 应用程序中灵活地添加处理程序和数据。
  • 允许自定义请求/响应负载。
  • 不需要服务器端代码。

注意事项

在使用这种方法时,需要记住以下注意事项:

  • 确保将访问令牌安全地存储并处理。
  • 根据外部 REST API 的要求调整代码。

常见问题解答

1. 如何安全地存储访问令牌?

  • 使用 MSAL 内置的 cacheLocation 选项。
  • 将访问令牌存储在本地存储中并限制访问。
  • 使用加密方法对访问令牌进行加密。

2. 我需要在每个请求中都添加访问令牌吗?

  • 只有在外部 REST API 要求授权的情况下才需要。
  • 可以使用 MSAL 的自动令牌续订功能以简化此过程。

3. 如何处理处理程序和数据的格式?

  • 处理程序和数据格式应符合外部 REST API 的要求。
  • 使用 JSON、XML 或其他格式,具体取决于 API。

4. 如何处理错误?

  • 使用 try-catch 语句来捕获错误。
  • 在响应中检查状态代码并采取适当措施。

5. 这种方法适用于所有外部 REST API 吗?

  • 此方法适用于支持 MSAL 授权的 REST API。
  • 检查外部 API 文档以确认其兼容性。