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

本地运行Azure Functions时获取已认证用户的问题

本地运行Azure Functions获取B2C认证用户信息的配置步骤

1. 手动实现JWT令牌验证

云端Azure Functions会自动由平台完成B2C令牌验证并填充context.req.user及相关请求头,但本地运行无此自动处理,需自行添加验证逻辑:

  • 安装依赖包:
    npm install jsonwebtoken jwks-rsa @types/jsonwebtoken --save-dev
    
  • 在Function代码中加入验证逻辑示例:
    import jwt from 'jsonwebtoken';
    import jwksClient from 'jwks-rsa';
    import { Context, HttpRequest } from '@azure/functions';
    
    const client = jwksClient({
      jwksUri: 'https://<你的B2C租户>.b2clogin.com/<你的B2C租户>.onmicrosoft.com/<你的B2C策略>/discovery/v2.0/keys'
    });
    
    function getKey(header: jwt.JwtHeader, callback: jwt.SigningKeyCallback) {
      client.getSigningKey(header.kid, (err, key) => {
        err ? callback(err) : callback(null, key.getPublicKey());
      });
    }
    
    export async function run(context: Context, req: HttpRequest) {
      const authHeader = req.headers.authorization;
      if (!authHeader || !authHeader.startsWith('Bearer ')) {
        context.res = { status: 401, body: '未授权' };
        return;
      }
      const token = authHeader.split(' ')[1];
      
      jwt.verify(token, getKey, {
        audience: '<你的Functions应用客户端ID>',
        issuer: 'https://<你的B2C租户>.b2clogin.com/<你的B2C租户ID>/v2.0/'
      }, (err, decoded) => {
        if (err) {
          context.res = { status: 401, body: '无效令牌' };
          return;
        }
        // 手动填充用户信息及请求头
        context.req.user = decoded;
        context.req.headers['X-MS-CLIENT-PRINCIPAL-ID'] = decoded.sub;
        
        // 后续业务逻辑
        context.res = { status: 200, body: `欢迎 ${decoded.name}` };
      });
    }
    

2. 配置local.settings.json补充认证参数

在本地配置文件中添加B2C相关参数,模拟云端环境:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "node",
    "AzureAdB2C__Tenant": "<你的B2C租户>",
    "AzureAdB2C__ClientId": "<你的Functions应用客户端ID>",
    "AzureAdB2C__Policy": "<你的B2C策略名称>",
    "AzureAdB2C__IssuerUrl": "https://<你的B2C租户>.b2clogin.com/<你的B2C租户ID>/v2.0/"
  }
}

3. 升级并配置本地Functions主机

如果使用Azure Functions v4+,可通过扩展启用本地认证支持:

  • 确保本地Functions CLI为最新版本:
    npm install -g azure-functions-core-tools@4
    
  • 在对应Function的function.json中添加认证规则:
    {
      "authLevel": "anonymous",
      "bindings": [
        // 你的绑定配置
      ],
      "auth": {
        "allowedAudiences": ["<你的Functions应用客户端ID>"],
        "issuers": ["https://<你的B2C租户>.b2clogin.com/<你的B2C租户ID>/v2.0/"]
      }
    }
    

核心注意点

  • 本地运行时Functions主机不会自动验证JWT,必须手动实现或通过扩展配置处理,这是与云端运行的核心差异。
  • audience和issuer参数必须与B2C应用注册中的配置完全匹配,否则令牌验证会失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 02:00:18