如何为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门户配置(快捷)
- 进入Function App的认证页面,确保已启用Azure AD作为身份提供商。
- 在Azure AD配置中选择“高级”模式,填入:
- 客户端ID:Function对应应用注册的Client ID
- 颁发机构URL:
https://login.microsoftonline.com/{租户ID}/v2.0
- 保存后,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)的客户端IDusername: 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
相关产品推荐
相关产品推荐

