.NET 8 MAUI中WebAuthenticator返回AccessToken为NULL问题求助
解决.NET 8中WebAuthenticator返回AccessToken为null的问题
针对你升级到.NET8后遇到的WebAuthenticator解析异常问题,以下是几个可行的解决思路:
手动解析回调参数
由于WebAuthenticator错误地将?access_token识别为参数键,你可以直接从authResult.Properties中提取对应值,或者手动解析回调URI:public static async Task<OAuthTokenResponse> Login() { try { WebAuthenticatorResult authResult = await WebAuthenticator.Default.AuthenticateAsync( new Uri($"{_apiUrl}/auth"), new Uri("myscheme://")); OAuthTokenResponse response = new OAuthTokenResponse(); if (authResult != null) { response.Success = true; // 直接读取异常键值 if (authResult.Properties.TryGetValue("?access_token", out var token)) { response.AccessToken = token; } // 或者手动解析回调URI的Fragment部分 else if (Uri.TryCreate(authResult.Properties["callbackUri"], UriKind.Absolute, out var callbackUri)) { var fragmentQuery = callbackUri.Fragment.TrimStart('#'); var queryParams = System.Web.HttpUtility.ParseQueryString(fragmentQuery); response.AccessToken = queryParams["access_token"]; } } return response; } catch { return new OAuthTokenResponse() { Success = false }; } }调整回调URI格式
检查OAuth服务端的回调地址配置,确保设置为myscheme://(不要带末尾斜杠),避免服务端自动添加多余斜杠导致URI结构异常。也可以尝试将回调URI改为myscheme:(省略双斜杠)测试是否能正常解析。使用带回调路径的重载方法
尝试使用指定回调路径的AuthenticateAsync重载,让回调URI结构更规范,减少解析歧义:WebAuthenticatorResult authResult = await WebAuthenticator.Default.AuthenticateAsync( new Uri($"{_apiUrl}/auth"), new Uri("myscheme://callback"));同时对应调整OAuth服务端的回调地址为
myscheme://callback。排查.NET 8的WebAuthenticator变更
查看.NET 8官方文档的WebAuthenticator更新说明,确认是否存在解析逻辑的变更或已知bug,若为官方问题可等待修复补丁,或在GitHub提交issue反馈。
内容的提问来源于stack exchange,提问作者Keith
相关产品推荐
相关产品推荐

