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

如何通过Azure托管标识限制.NET Core Web API的访问权限?

解决方法:限制仅指定用户分配托管标识访问Azure API App

一、先关闭API App的匿名访问(Azure门户配置)

当前API App允许匿名请求是导致未分配托管标识的Web App仍能访问的核心原因,需先拦截未授权请求:

  • 进入Azure门户的API App资源,打开身份验证选项卡
  • 启用「App Service 身份验证」,在「未经过身份验证的请求」下拉框中选择拒绝(401未经授权),无合法身份的请求会直接被拦截

二、配置API App的权限规则,锁定目标托管标识

你之前给托管标识分配的「参与者(Contributor)」是资源管理权限,和API访问权限无关,需重新配置:

  • 确保API App已关联Azure AD应用(启用App Service身份验证后会自动创建)
  • 在Azure AD中找到你的用户分配托管标识,为其分配API App的访问权限(可在API App的Azure AD应用「权限」页或托管标识的「权限」页操作)

三、在API App代码中添加身份验证中间件,精准校验标识

仅靠门户设置不够,需在.NET Core Web API中添加授权逻辑,确保只有指定托管标识能访问:

  1. 项目引用Microsoft.Identity.Web NuGet包
  2. 在Program.cs中配置Azure AD身份验证:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"));
  1. 定义专属授权策略,指定允许的托管标识(替换为你的托管标识客户端ID):
builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("OnlyAllowedManagedIdentity", policy =>
    {
        policy.RequireClaim("azp", "<你的用户分配托管标识客户端ID>");
    });
});
  1. 在控制器或路由上应用该策略:
[Authorize(Policy = "OnlyAllowedManagedIdentity")]
[ApiController]
[Route("api/[controller]")]
public class YourController : ControllerBase
{
    // 你的API接口逻辑
}

四、Web App侧配置使用托管标识调用API

现在给Web App分配目标托管标识,并修改代码以标识身份请求API:

  • 在Web App的身份标识设置中,启用用户分配的托管标识,添加你创建的那个标识
  • 修改Web App的HttpClient调用逻辑,用托管标识获取令牌:
var credential = new DefaultAzureCredential(new DefaultAzureCredentialOptions
{
    ManagedIdentityClientId = "<你的托管标识客户端ID>"
});
var token = await credential.GetTokenAsync(new TokenRequestContext(new[] { "<API App的Azure AD应用范围>" }));

var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Token);
var response = await client.GetAsync("<API App端点URL>");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:25:55