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

ASP.NET三层架构集成Azure AD认证问题求助

解决Web APP通过AJAX向Web API传递Azure AD令牌的问题

我刚处理过几乎一模一样的场景,核心问题就是你的Web APP在AJAX调用API时没带上用户的Azure AD访问令牌,导致API认不出请求身份。下面是我实际项目里验证过的步骤,一步步来就能搞定:

1. 在Web APP后端获取针对API的访问令牌

首先得在你的ASP.NET MVC项目里拿到能访问Web API的令牌,用Microsoft.Identity.Web库最省心——如果是新版ASP.NET模板,这个库已经集成了;旧版本的话,先装个NuGet包Microsoft.Identity.Web就行。

在Program.cs(或者旧版的Startup.cs)里,把认证配置改成这样,加上调用下游API的能力:

// Program.cs 示例代码
builder.Services.AddMicrosoftIdentityWebAppAuthentication(builder.Configuration)
    .EnableTokenAcquisitionToCallDownstreamApi(new string[] { "api://你的WebAPI应用ID/自定义访问范围" })
    .AddInMemoryTokenCaches();

然后在MVC控制器里注入ITokenAcquisition服务,拿令牌传给视图:

private readonly ITokenAcquisition _tokenAcquisition;

public HomeController(ITokenAcquisition tokenAcquisition)
{
    _tokenAcquisition = tokenAcquisition;
}

public async Task<IActionResult> Index()
{
    // 这里的范围要和你在Azure门户里给WebAPI定义的一致
    string accessToken = await _tokenAcquisition.GetAccessTokenForUserAsync(new string[] { "api://你的WebAPI应用ID/自定义访问范围" });
    // 把令牌放到ViewBag里,让前端能拿到
    ViewBag.ApiToken = accessToken;
    return View();
}

2. 前端AJAX请求带上令牌

在你的MVC视图(比如Index.cshtml)里,把后端传过来的令牌加到AJAX的请求头里,用Bearer认证格式:

$(document).ready(function() {
    // 从ViewBag取令牌,注意这里的Razor语法要正确解析
    const apiToken = '@ViewBag.ApiToken';
    
    // 调用Web API的AJAX示例
    $.ajax({
        url: 'https://你的WebAPI域名/api/你的数据接口',
        method: 'GET',
        headers: {
            // 关键:把令牌放到Authorization头里
            'Authorization': `Bearer ${apiToken}`
        },
        success: function(response) {
            // 拿到数据后随便怎么渲染都行
            console.log('API返回数据:', response);
            $('#data-display').text(JSON.stringify(response));
        },
        error: function(xhr) {
            if (xhr.status === 401) {
                // 令牌过期了,跳回登录页重新拿
                window.location.href = '/Account/SignIn';
            } else {
                alert('加载数据失败,请稍后重试');
                console.error('API调用错误:', xhr.responseText);
            }
        }
    });
});

3. 确认Web API的Azure AD配置正确

别漏了在Azure门户里给Web API开权限,让Web APP能访问它:

  • 找到你的Web API应用注册,进入「公开API」页面,确认你用的访问范围已经创建好了
  • 进入「API权限」页面,添加Web APP的应用权限(或者确保Web APP已经被授权访问这个范围)
  • 另外Web API的代码里,认证中间件要配置对:
// Web API的Program.cs示例
builder.Services.AddMicrosoftIdentityWebApiAuthentication(builder.Configuration);

4. 额外的小细节

  • 令牌有有效期,所以前端一定要处理401错误,跳回登录页重新获取
  • 别在前端硬编码任何敏感信息,令牌必须从后端传过来
  • 确保Web APP和Web API在同一个Azure AD租户里,跨租户的话还要额外配置信任关系

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:24:51