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

在Azure Functions中实现基于AAD B2C的JWT身份验证

在Azure Functions中实现AAD B2C认证授权(替代ASP.NET Core的UseAuthentication/UseAuthorization)

核心差异说明

Azure Functions的请求管道模型和ASP.NET Core不同,不需要通过app.UseAuthentication()/app.UseAuthorization()注册中间件,而是通过服务配置+[Authorize]属性来实现认证授权逻辑。

步骤1:完善服务配置

在你的ConfigureServices代码中,需要添加AddAuthorization()来注册授权服务,完整配置如下:

.ConfigureServices((host, services) =>
{
    services
        .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddMicrosoftIdentityWebApi(options =>
            {
                host.Configuration.Bind("AzureAdB2C", options);
                options.TokenValidationParameters.NameClaimType = "name";
            },
            options => { host.Configuration.Bind("AzureAdB2C", options); }
        );

    // 注册授权服务,支持[Authorize]属性
    services.AddAuthorization();
})

步骤2:在函数上启用认证授权

在需要保护的函数方法或类上添加[Authorize]属性,同时注意将HttpTrigger的AuthorizationLevel设置为Anonymous(避免Functions自带的密钥认证覆盖JWT认证):

public class ProtectedFunctions
{
    [FunctionName("GetProtectedData")]
    [Authorize] // 启用AAD B2C认证,无有效令牌会返回401
    public async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest req,
        ILogger log)
    {
        // 访问认证后的用户信息
        var currentUser = req.HttpContext.User;
        var userName = currentUser.Identity.Name;
        var userEmail = currentUser.FindFirst(ClaimTypes.Email)?.Value;

        return new OkObjectResult($"Authenticated user: {userName}, Email: {userEmail}");
    }
}

关键注意事项

  • HttpTrigger权限设置:必须将AuthorizationLevel设为Anonymous,否则Functions会优先使用API密钥进行认证,忽略你的JWT令牌。
  • 配置一致性:确保AzureAdB2C的配置项(Instance、Domain、TenantId、ClientId、SignUpSignInPolicyId等)和你之前的Blazor/Web API配置完全一致。
  • 自定义授权策略:如果需要基于角色/声明的细粒度授权,可以在AddAuthorization中配置策略,例如:
    services.AddAuthorization(options =>
    {
        options.AddPolicy("AdminOnly", policy =>
            policy.RequireClaim("role", "Admin"));
    });
    
    然后在函数上使用[Authorize(Policy = "AdminOnly")]。

内容的提问来源于stack exchange,提问作者Giorgio Di Nardo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:47:25