You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VS Code中调试Node.js应用的微软API网络调用

关于@azure/msal-node的OBO令牌请求及VS Code调试指南

一、acquireTokenOnBehalfOf调用的API及Payload详情

1. 目标微软API

acquireTokenOnBehalfOf方法调用的是Microsoft Entra ID的OAuth 2.0 On-Behalf-Of令牌端点,具体地址取决于你的云环境:

  • 全球版:https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token
  • 中国版:https://login.partner.microsoftonline.cn/{tenant-id}/oauth2/v2.0/token
    其中{tenant-id}替换为你的租户ID(可以是租户域名、GUID,或common/organizations这类通用值)。

2. 请求Payload核心参数

该请求为POST方法,Content-Type固定为application/x-www-form-urlencoded,Payload包含以下必填参数:

  • grant_type:固定值urn:ietf:params:oauth:grant-type:jwt-bearer
  • client_id:你的应用注册客户端ID
  • client_secret/client_assertion:应用凭据(机密客户端用secret,证书认证用assertion)
  • assertion:上游获取的用户令牌(比如前端传来的ID Token或Access Token)
  • scope:目标资源的权限范围,格式如https://graph.microsoft.com/.default
  • requested_token_use:固定值on_behalf_of
    可选参数:tenant_id(当使用通用端点时指定租户)

二、VS Code中调试网络请求的三种方法

1. 开启msal-node内置调试日志

msal-node自带日志功能,开启后直接输出请求全量信息:
在你的msal配置中添加日志选项:

const { LogLevel } = require('@azure/msal-node');

const msalConfig = {
  auth: {
    clientId: "你的客户端ID",
    tenantId: "你的租户ID",
    clientSecret: "你的客户端密钥"
  },
  system: {
    loggerOptions: {
      loggerCallback(loglevel, message, containsPii) {
        console.log(message); // 打印所有日志,含网络请求详情
      },
      logLevel: LogLevel.Verbose, // 开启 verbose 级别日志
      piiLoggingEnabled: false // 禁止打印个人敏感信息
    }
  }
};

启动应用后,控制台会输出请求URL、Payload、响应等完整内容。

2. 抓包工具配合VS Code调试

用抓包工具(如Wireshark、Charles)直观查看请求:

  • 启动抓包工具,配置监听本地HTTPS流量(需安装信任证书)
  • 在VS Code中打开项目,在acquireTokenOnBehalfOf调用行设置断点
  • 打开「运行和调试」面板,启动Node.js调试会话
  • 程序走到断点后继续执行,抓包工具会捕获到msal-node发送的请求,可查看URL、Headers、Payload及响应。

3. 重写Node.js的HTTP请求方法拦截日志

通过重写https.request方法,手动打印所有网络请求:
将以下代码放在应用入口最顶部:

const https = require('https');
const originalRequest = https.request;

https.request = function(options, callback) {
  console.log('请求URL:', `https://${options.host}${options.path}`);
  console.log('请求方法:', options.method);
  console.log('请求Headers:', options.headers);
  
  const req = originalRequest(options, callback);
  
  // 监听Payload发送
  const originalWrite = req.write;
  req.write = function(chunk) {
    console.log('请求Payload:', chunk.toString());
    return originalWrite.apply(this, arguments);
  };
  
  return req;
};

启动应用后,所有HTTPS请求(包括msal-node的API调用)的详情都会打印到控制台。

内容的提问来源于stack exchange,提问作者suraj sinha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 19:27:44