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

如何为Node.js Azure Functions应用实现Azure AD身份验证与授权

Node.js Azure Functions 实现Azure AD身份验证与授权

前置配置

  1. 在Azure AD中注册Web API类型的应用,记录以下信息:
    • 租户ID(Tenant ID)
    • 客户端ID(Client ID)
    • API受众(Audience,即你设置的API范围URI)
  2. 在Azure Functions应用的配置中添加以下环境变量:
    • AZURE_AD_TENANT_ID:你的Azure AD租户ID
    • AZURE_AD_CLIENT_ID:注册的应用客户端ID
    • AZURE_AD_AUDIENCE:API受众URI

依赖安装

执行命令安装Azure AD验证所需的库:

npm install @azure/msal-node

验证Token的辅助工具

创建authHelper.js文件,实现Token验证逻辑:

const { PublicClientApplication, ValidationParameters } = require('@azure/msal-node');

const msalConfig = {
  auth: {
    clientId: process.env.AZURE_AD_CLIENT_ID,
    authority: `https://login.microsoftonline.com/${process.env.AZURE_AD_TENANT_ID}`
  }
};

const pca = new PublicClientApplication(msalConfig);

async function validateBearerToken(req) {
  const authHeader = req.headers.authorization;
  if (!authHeader || !authHeader.startsWith('Bearer ')) {
    return { isValid: false, error: '缺少有效的Bearer Token' };
  }

  const token = authHeader.split(' ')[1];
  const validationParams = {
    audience: process.env.AZURE_AD_AUDIENCE,
    issuer: `https://login.microsoftonline.com/${process.env.AZURE_AD_TENANT_ID}/v2.0`
  };

  try {
    const validationResult = await pca.validateIdToken(token, validationParams);
    return { isValid: true, claims: validationResult.claims };
  } catch (error) {
    return { isValid: false, error: error.message };
  }
}

module.exports = { validateBearerToken };

Azure Functions 示例代码

创建HTTP触发的函数(比如HttpTrigger/index.js),集成身份验证:

const { validateBearerToken } = require('../authHelper');

module.exports = async function (context, req) {
  // 验证Token
  const authResult = await validateBearerToken(req);
  if (!authResult.isValid) {
    context.res = {
      status: 401,
      body: { error: '未授权', details: authResult.error }
    };
    return;
  }

  // Token验证通过,处理业务逻辑
  context.res = {
    status: 200,
    body: {
      message: '访问成功',
      userInfo: {
        userId: authResult.claims.sub,
        userName: authResult.claims.name,
        email: authResult.claims.email
      }
    }
  };
};

注意事项

  • 确保函数应用的环境变量已正确配置,且能被函数读取
  • 若使用Azure AD v1.0端点,需调整authority和issuer的格式(去掉/v2.0)
  • 可根据需求添加权限范围(Scope)的验证,在validationParams中加入scopes字段

内容的提问来源于stack exchange,提问作者Bablu Ahmed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:55:25