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

如何修复调用GetAccessTokenForAppAsync获取令牌时出现的NullReferenceException

问题根源

你遇到的NullReferenceException是认证服务注册方式错误导致的:当前使用的AddMicrosoftIdentityWebApiAuthentication是面向接收Bearer令牌的Web API资源服务器场景设计的,默认依赖传入的用户令牌上下文,无用户场景下调用服务级令牌获取方法时,内部缺失必要的初始化对象,因此抛出空引用。


修复步骤

  1. 调整Startup服务注册逻辑
    将原有的WebApi认证注册替换为适用于Razor Pages的WebApp认证注册,修改后的代码如下:
public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();
    services.AddHttpClient();
    
    services.AddMicrosoftIdentityWebAppAuthentication(Configuration)
        .EnableTokenAcquisitionToCallDownstreamApi()
        // 保留内存令牌缓存实现自动令牌刷新
        .AddInMemoryTokenCaches();
        
    // 如果你不需要全局登录校验,可以删除下方的授权配置
    services.AddAuthorization(options =>
    {
        options.FallbackPolicy = options.DefaultPolicy;
    });

    // 其余原有配置保持不变
}
  1. 调整页面模型配置与调用逻辑
    如果你的Index页面不需要用户登录即可访问,需要为PageModel添加[AllowAnonymous]属性,同时调用GetAccessTokenForAppAsync时不需要额外传入tenant参数,直接使用配置文件中预设的租户ID即可,修改后代码如下:
[AllowAnonymous]
public class IndexModel : PageModel
{
    private readonly IHttpClientFactory _clientFactory;
    private readonly ITokenAcquisition _tokenAcquisition;

    public IndexModel(IHttpClientFactory clientFactory, ITokenAcquisition tokenAcquisition)
    {
        _clientFactory = clientFactory;
        _tokenAcquisition = tokenAcquisition;
    }

    public async Task OnGet()
    {
        string token = await _tokenAcquisition.GetAccessTokenForAppAsync("https://graph.microsoft.com/.default");
    }
}
  1. 兼容校验与配置检查
  • 由于你使用的是ASP.NET Core 3.1,需要将Microsoft.Identity.Web包版本锁定在1.x系列(最高支持1.25.10),2.0及以上版本不再兼容.NET Core 3.1,会引发未知运行时错误。
  • 确认appsettings.json(或用户机密)中的AzureAd配置项完整正确:Instance固定为https://login.microsoftonline.com/,ClientId、TenantId、ClientSecret需要和你在Azure Portal中注册的应用信息完全一致,无拼写错误。
  • 确认你注册的Azure AD应用已经授予了所需的Microsoft Graph应用级权限,且已经过租户管理员同意。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:18:02