使用Microsoft.Identity.Web 1.60调用Microsoft Graph抛出NullReferenceException
你遇到的空引用异常来自Microsoft.Identity.Web.MergedOptions.PrepareAuthorityInstanceForMsal()方法,本质是身份配置参数没有被正确加载到合并配置对象中,属于Microsoft.Identity.Web版本升级后的配置兼容性问题,可按以下步骤排查修复:
- 核对依赖版本兼容性
不要混用不兼容的Microsoft.Identity.Web和Microsoft.Graph版本,.NET 5环境下建议使用Microsoft.Identity.Web 1.25.10+Microsoft.Graph 4.54.0,避免使用2.x版本的Microsoft.Identity.Web(2.x系列最低支持.NET 6) - 修正服务注册代码
显式指定AzureAd配置节名称,避免配置上下文异常导致参数读取失败,修改后的代码如下:services.AddMicrosoftIdentityWebApiAuthentication(configuration, "AzureAd") .EnableTokenAcquisitionToCallDownstreamApi() .AddMicrosoftGraph(configuration.GetSection("MicrosoftGraph")) .AddInMemoryTokenCaches(); - 修正MicrosoftGraph配置格式
新版本AddMicrosoftGraph扩展要求Scopes为字符串数组格式,你当前使用的空格分隔单字符串会导致解析失败,修改appsettings.json对应节点:"MicrosoftGraph": { "BaseUrl": "https://graph.microsoft.com/v1.0", "Scopes": ["user.read", "user.read.all"] } - 适配权限调用类型
如果你是使用应用权限(而非当前登录用户的委托权限)调用Graph,需要将AddMicrosoftGraph替换为AddMicrosoftGraphAppOnly:services.AddMicrosoftIdentityWebApiAuthentication(configuration, "AzureAd") .EnableTokenAcquisitionToCallDownstreamApi() .AddMicrosoftGraphAppOnly(configuration.GetSection("MicrosoftGraph")) .AddInMemoryTokenCaches();
内容的提问来源于stack exchange,提问作者Fernando
相关产品推荐
相关产品推荐

