You need to enable JavaScript to run this app. Blazor WASM调用受Azure AD保护的Azure Functions API遇AADSTS65001错误问询
优惠活动
大模型
产品
解决方案
定价
更多

Blazor WASM调用受Azure AD保护的Azure Functions API遇AADSTS65001错误问询

Blazor WASM 调用AAD保护Azure Functions的实现与报错排查

实现步骤与代码示例

  • 首先确认两个前置配置已完成:Blazor客户端的应用注册已配置目标API的委托权限、API侧的应用注册已暴露对应客户端可访问的作用域,两类应用分属不同子域名部署时无需调整应用注册的跨域设置。
  • 调整Blazor WASM项目的认证服务注册逻辑,核心是指定需要获取令牌的目标API作用域,而非仅配置默认的Microsoft Graph作用域,示例配置如下:
// Blazor WASM 项目 Program.cs 核心配置
builder.Services.AddMsalAuthentication(options =>
{
    // 绑定客户端应用注册的AAD租户、客户端ID等基础配置
    builder.Configuration.Bind("AzureAd", options.ProviderOptions.Authentication);
    // 追加目标API的访问作用域,格式为 api://<API应用注册客户端ID>/<暴露的作用域名>
    options.ProviderOptions.DefaultAccessTokenScopes.Add("api://你的API应用注册ID/配置的作用域名");
});

// 注册自动携带认证令牌的HttpClient,指向Azure Functions的部署域名
builder.Services.AddScoped(sp => new HttpClient
{
    BaseAddress = new Uri("https://hypotheticalapi.azurewebsites.net/")
});
  • 调整Azure Functions端的CORS规则,允许Blazor客户端的部署域名(hypotheticalweb.azurewebsites.net)的跨域请求,必须勾选CORS配置中的“启用访问控制凭据”选项,否则带Authorization请求头的认证请求会被浏览器拦截。
  • 业务组件中直接通过注入的HttpClient调用API,令牌获取、过期刷新的流程由MSAL自动处理,遇到认证缺失时直接触发登录跳转即可,示例调用逻辑:
@inject HttpClient Http
@inject NavigationManager Nav

// 调用受保护的Function接口
private async Task CallProtectedEndpoint()
{
    try
    {
        var apiResult = await Http.GetFromJsonAsync<string>("api/你的函数路由");
        // 处理接口返回结果
    }
    catch (AccessTokenNotAvailableException authEx)
    {
        // 令牌无效或缺失时,自动跳转AAD认证页完成授权
        authEx.RedirectToLogin();
    }
}

AADSTS65001报错与旧同意记录清除方案

  • 该报错的核心触发原因是配置变更后,AAD侧残留了之前的用户同意缓存,即便删除了客户端的权限配置,旧的同意记录依然会阻止AAD重新弹出交互式授权页。
  • 清除历史同意记录的可操作方案:
    • 普通用户维度:在个人应用门户中找到对应Blazor客户端应用,选择移除应用访问权限,即可清除个人账户下的同意记录。
    • 客户端配置维度:在MSAL的认证参数中添加强制授权提示,手动要求AAD重新弹出同意页,示例配置:
    // 在AddMsalAuthentication的配置块中追加
    options.ProviderOptions.AdditionalQueryParameters = new Dictionary<string, string>
    {
        {"prompt", "consent"}
    };
    
    • 管理员维度:若为企业租户环境,全局管理员可在企业应用管理面板中,针对对应Blazor客户端应用清除所有用户的历史同意记录,强制全量重新走授权流程。
  • 跨域问题额外排查点:如果认证流程正常但依然报跨域错误,优先检查Azure Functions的CORS配置是否未开启凭据支持——带Authorization头的请求属于带凭据的跨域请求,默认CORS配置无法放行这类请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.11 06:06:04