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

为何Azure REST API的安全配置无法如此简单?

Azure Web API 认证授权方案问题分析与修正

核心问题:“无需令牌调用”不可行

Azure Web API 与 WebApp 的设计逻辑存在本质区别:WebApp 可结合匿名访问+角色授权实现部分资源开放,但 Azure AD 对 Web API 的定位是服务间/用户与服务的安全交互,默认要求所有请求必须携带有效令牌完成认证,不存在“仅添加角色即可无需令牌调用”的场景——角色是授权逻辑,认证(令牌验证)是前置必要条件。

你的步骤遗漏点

  1. 应用调用的认证流程缺失:仅给应用的 Enterprise Application 分配角色不够,调用方应用需通过**客户端凭证流(Client Credential Flow)**获取包含角色声明的令牌,才能被 API 识别授权。
  2. API 权限配置未完成:需在 API 的 App Registration 中,为调用应用添加对应的应用权限(绑定你创建的角色),并授予管理员同意,确保调用方的令牌能包含该角色声明。
  3. 授权策略未区分用户/应用场景:默认的角色授权虽能覆盖用户和应用,但如果需要更精准控制(比如限制特定应用),需在授权策略中补充凭证校验。

修正后的可行方案

补充配置步骤

  • 在 API 的 App Registration → “API 权限” → “添加权限” → “我的 API”,选择你创建的 API,添加应用权限(对应之前创建的角色),点击“授予管理员同意”。
  • 调用方应用需使用自身的客户端 ID、客户端密钥(或证书),通过 Azure AD 令牌端点获取令牌,示例请求:
    POST https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token
    Content-Type: application/x-www-form-urlencoded
    
    client_id={calling-app-client-id}
    &scope={api-app-id-uri}/.default
    &client_secret={calling-app-client-secret}
    &grant_type=client_credentials
    

代码配置调整

在 Program.cs 中完善认证与授权策略:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"));

builder.Services.AddAuthorization(options =>
{
    // 用户 reader 角色访问策略
    options.AddPolicy("UserReader", policy =>
        policy.RequireRole("reader")
              .RequireClaim("oid")); // 确保是用户令牌(oid 是用户对象ID)

    // 应用角色访问策略
    options.AddPolicy("AppAccess", policy =>
        policy.RequireRole("your-app-role")
              .RequireClaim("azp", "calling-app-client-id")); // 限制特定应用调用
});

控制器授权配置

// 仅允许带 reader 角色的用户访问
[Authorize(Policy = "UserReader")]
[HttpGet("user-only")]
public IActionResult UserReaderEndpoint()
{
    return Ok("仅登录且拥有 reader 角色的用户可访问");
}

// 仅允许指定应用(带对应角色)访问
[Authorize(Policy = "AppAccess")]
[HttpGet("app-only")]
public IActionResult AppAccessEndpoint()
{
    return Ok("仅指定应用(携带有效令牌+对应角色)可访问");
}

总结

你的方案核心矛盾在于对 Azure Web API 的认证逻辑认知偏差——API 必须验证令牌有效性,无法跳过认证直接通过角色授权。补充应用权限配置、客户端凭证流调用逻辑后,即可实现用户与应用的分角色授权访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 13:32:34