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

如何在Node项目中调用Azure Kudu Rest API查询WebJob状态(遇401错误)

解决Azure App Service中MFA账号调用Kudu API查询WebJob状态的401问题

核心问题原因

启用MFA的用户账号无法通过密码进行Basic Auth调用Kudu API,Kudu不支持MFA用户的密码认证,必须改用部署凭据或托管标识。另外注意Kudu API的正确端点是带scm的子域名,即https://<你的应用名>.scm.azurewebsites.net/api/webjobs,而非你之前使用的不带scm的端点,这也是可能导致401的原因之一。

解决方案一:使用应用级部署凭据(简单快捷)

  • 步骤1:在Azure门户中,进入目标App Service的部署中心 -> 部署凭据,设置或查看应用级凭据(区别于用户级凭据,应用级凭据与当前App Service绑定,不受用户MFA影响)。
  • 步骤2:在Node.js代码中,使用该凭据进行Basic Auth调用:
const axios = require('axios');

const appName = '你的App Service名称';
const deployUsername = '应用级部署凭据用户名';
const deployPassword = '应用级部署凭据密码';

async function fetchWebJobsStatus() {
  try {
    const res = await axios.get(`https://${appName}.scm.azurewebsites.net/api/webjobs`, {
      auth: {
        username: deployUsername,
        password: deployPassword
      }
    });
    console.log('WebJobs状态:', res.data);
  } catch (err) {
    console.error('查询失败:', err.response?.data || err.message);
  }
}

fetchWebJobsStatus();

解决方案二:使用托管标识(无密码,更安全)

适合生产环境,无需存储任何凭据:

  • 步骤1:在Azure门户中,给运行WebJob的App Service启用系统分配托管标识(在标识 -> 系统分配中开启)。
  • 步骤2:给该托管标识授予目标App Service的网站参与者或网站贡献者角色(进入目标App Service的访问控制(IAM) -> 添加角色分配,选择对应角色和托管标识)。
  • 步骤3:Node.js代码中,先获取托管标识的访问令牌,再用Bearer Token认证调用Kudu API:
const axios = require('axios');

const appName = '你的App Service名称';
const targetResource = 'https://management.azure.com/';

async function getManagedIdentityToken() {
  const tokenRes = await axios.get('http://169.254.169.254/metadata/identity/oauth2/token', {
    params: {
      api_version: '2018-02-01',
      resource: targetResource
    },
    headers: { 'Metadata': 'true' }
  });
  return tokenRes.data.access_token;
}

async function fetchWebJobsStatus() {
  try {
    const token = await getManagedIdentityToken();
    const res = await axios.get(`https://${appName}.scm.azurewebsites.net/api/webjobs`, {
      headers: { 'Authorization': `Bearer ${token}` }
    });
    console.log('WebJobs状态:', res.data);
  } catch (err) {
    console.error('查询失败:', err.response?.data || err.message);
  }
}

fetchWebJobsStatus();

注意事项

  • 应用级部署凭据不会随用户账号变更或MFA设置调整失效,适合长期使用。
  • 托管标识仅能在Azure内部环境访问元数据服务获取令牌,若WebJob在本地调试需改用其他方式。
  • 确保调用的Kudu API端点正确,必须包含scm子域名。

内容的提问来源于stack exchange,提问作者Pratiyush Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 02:52:23