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

如何为Azure Function及Web App配置JWT安全,并通过Postman测试令牌?

Azure AD JWT 认证配置与 Postman 测试指南

一、Azure AD 应用注册准备

  • 针对现有.NET Core Web应用:确认其对应的Azure AD应用注册中,公开API模块已添加api://{客户端ID}格式的范围,标记为“已启用”,记录完整范围URI(如api://xxxxxx/access_as_user)。
  • 针对Azure Function:新建或复用Azure AD应用注册,同样在公开API添加专属范围;若分开注册,需在Function的应用注册API权限中添加Web应用注册的API权限,并完成管理员授权。
  • 记录核心信息:两个应用的客户端ID、租户ID,以及各自的API范围URI。

二、.NET Core 6 Web应用 JWT 认证配置

在Program.cs中添加JWT认证中间件,补充或替换原有Azure AD认证逻辑:

var builder = WebApplication.CreateBuilder(args);

// 注册JWT认证服务
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.Authority = $"https://login.microsoftonline.com/{builder.Configuration["AzureAd:TenantId"]}/v2.0";
        options.Audience = builder.Configuration["AzureAd:Audience"]; // 填入Web应用的API范围URI
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidateIssuerSigningKey = true
        };
    });

builder.Services.AddAuthorization();

var app = builder.Build();

// 启用认证与授权中间件
app.UseAuthentication();
app.UseAuthorization();

// 其他中间件配置
app.Run();

在appsettings.json中补充配置项:

"AzureAd": {
  "TenantId": "你的租户ID",
  "Audience": "Web应用的API范围URI"
}

三、Azure Function JWT 认证配置

方式1:Azure门户配置(快捷)

  1. 进入Function App的认证页面,确保已启用Azure AD作为身份提供商。
  2. 在Azure AD配置中选择“高级”模式,填入:
    • 客户端ID:Function对应应用注册的Client ID
    • 颁发机构URL:https://login.microsoftonline.com/{租户ID}/v2.0
  3. 保存后,Function自动完成JWT令牌有效性验证。

方式2:代码自定义配置

在Function项目的Startup.cs中添加认证逻辑:

using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.IdentityModel.Tokens;
using Microsoft.AspNetCore.Authentication.JwtBearer;

[assembly: FunctionsStartup(typeof(YourFunctionNamespace.Startup))]
namespace YourFunctionNamespace
{
    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            var config = builder.GetContext().Configuration;
            builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddJwtBearer(options =>
                {
                    options.Authority = $"https://login.microsoftonline.com/{config["AzureAd:TenantId"]}/v2.0";
                    options.Audience = config["AzureAd:Audience"]; // Function的API范围URI
                    options.TokenValidationParameters = new TokenValidationParameters
                    {
                        ValidateIssuer = true,
                        ValidIssuer = $"https://login.microsoftonline.com/{config["AzureAd:TenantId"]}/v2.0",
                        ValidateAudience = true,
                        ValidateLifetime = true
                    };
                });

            builder.Services.AddAuthorization();
        }
    }
}

在Function方法上添加[Authorize]属性启用保护:

[FunctionName("YourFunction")]
[Authorize]
public async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
    ILogger log)
{
    // 函数业务逻辑
}

四、Postman 获取令牌与测试

1. 获取JWT令牌

新建POST请求,URL为:https://login.microsoftonline.com/{租户ID}/oauth2/v2.0/token
在Body标签选择x-www-form-urlencoded,添加以下参数:

  • grant_type: password(测试用快捷方式,生产环境推荐授权码流)
  • client_id: 目标应用(Web/Function)的客户端ID
  • username: Azure AD用户账号(如xxx@yourtenant.onmicrosoft.com)
  • password: 用户密码
  • scope: 目标应用的API范围URI + openid(如api://xxxxxx/access_as_user openid)
  • client_secret: 若使用客户端凭证流(grant_type=client_credentials),需添加应用注册的客户端密码

发送请求后,响应中的access_token即为所需JWT令牌。

2. 测试受保护接口

新建请求指向Web应用API或Function URL,在Headers中添加:

  • Authorization: Bearer {获取到的access_token}
    发送请求,令牌有效则返回正常响应;无效则返回401 Unauthorized。

常见问题排查

  • 401错误:检查令牌aud(受众)与应用配置的Audience是否匹配;确认令牌未过期;核对租户ID正确性。
  • 权限不足:确认用户/服务主体已被授予对应API权限,并完成管理员/用户同意。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:10:20