Blazor Server本地AAD认证突然返回Null身份对象求助
我知道这个问题可能被标记为低质量,但还是得求助。我正在开发一个对接Entra ID(原AAD)的Blazor Server应用,采用SSO方式,无需用户手动登录。该认证功能此前正常运行6个月,但昨日上午突然失效,目前我仍在本地运行项目,尚未发布到Azure。
项目初始化时已搭建好认证框架,据我了解,认证是通过SignalR而非HTTP Context处理的,全程由.NET 6后台处理,对吗?
在LoginDisplay页面中,我使用AuthStateProvider.GetAuthenticationStateAsync().Result获取用户名、邮箱及角色等信息,代码如下:
public string UserName { get; set; } = string.Empty; protected override void OnInitialized() { var authState = AuthStateProvider.GetAuthenticationStateAsync().Result; var user = authState.User; if (authState.User.Identity.Name != null && Storage != null) { UserName = authState.User.Claims.First(c => c.Type == "name").Value; Storage.SetAsync("userName", UserName); Storage.SetAsync("userEmail", authState.User.Identity.Name!); Storage.SetAsync("IsTaxApprover", user.IsInRole("TaxonomyApprover")); Storage.SetAsync("IsAdmin", user.IsInRole("TaxonomyAdmin")); } }
现在我获取到的是Null对象,无法完成认证。
我未修改过认证相关代码,仅将认证包升级至最新版本6.0.23。
已尝试的排查步骤
- 查阅微软官方文档以加深理解;
- 搜索“AuthStateProvider returns null”相关内容,但结果均聚焦于自定义代码及注入认证提供程序的问题,与我的情况不符;
- 检查AAD中的应用注册信息,未发现变更。
急需下一步排查方向的建议,感谢帮助。
更新1:经建议使用Fiddler抓包,发现一系列Application Insights 400错误,响应体内容为{"itemsReceived":1,"itemsAccepted":0,"errors":[{"index":0,"statusCode":400,"message":"Invalid instrumentation key"}]}。我正在查阅相关文档,但不确定是否会影响用户认证。
更新2:解决Application Insights错误后,发现认证端点请求GET /metadata/identity/oauth2/token?返回错误:
[Fiddler] 与'169.254.169.254'的连接失败。
错误:NetworkUnreachable (0x2743)。
System.Net.Sockets.SocketException 尝试对不可达网络169.254.169.254:80执行套接字操作
该IP属于Azure实例元数据服务(IMDS),仅可在Azure虚拟机或容器内访问,但我并未使用上述环境,不清楚为何会触发该请求。
更新3:我已向Entra ID团队提交请求以获取相关日志,但公司规模较大,可能需要较长时间才能得到回复。
更新4:我创建了一个新的Identity应用,可正常运行。这让我想起项目中的MS Identity连接服务已失效,尝试重新配置时,始终报错“JSON响应中存在未知字符”。我认为当前项目已出现问题,若无法修复,将不得不迁移至新项目,这会耗费大量时间。无论如何,我将关闭此问题,感谢协助。
内容的提问来源于stack exchange,提问作者USMC6072

