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

OWIN Facebook登录抛出JsonReaderException问题求助

问题分析与解决办法

核心原因

Facebook近期调整了API响应编码策略,默认启用了gzip/deflate压缩,但当前使用的Microsoft.Owin.Security.Facebook(v4.2.2)组件的默认HttpClient未配置自动解压压缩响应的功能。这导致tokenResponse.Content.ReadAsStringAsync()读取到的是压缩后的二进制字节流(而非明文JSON),传入JObject.Parse()时直接触发JSON解析错误。

你用Fiddler能看到有效JSON,是因为Fiddler默认会自动解压压缩响应,终端展示的是明文内容,但代码里读取的是原始压缩数据。

无需替换自定义代码的解决办法

在OWIN启动配置中,为Facebook认证模块的HttpClient添加自动解压处理程序即可:

  1. 找到项目中Startup.Auth.cs(或对应OWIN启动配置类)里的Facebook认证配置代码,修改为如下形式:
app.UseFacebookAuthentication(new FacebookAuthenticationOptions
{
    AppId = "你的AppId",
    AppSecret = "你的AppSecret",
    BackchannelHttpHandler = new HttpClientHandler
    {
        AutomaticDecompression = System.Net.DecompressionMethods.GZip | System.Net.DecompressionMethods.Deflate
    }
});

这段代码为Facebook认证使用的后台HttpClient配置了自动解压gzip/deflate压缩响应的逻辑,确保ReadAsStringAsync()读取到的是可直接解析的明文JSON。

  1. 重新部署后,Facebook登录流程中获取access_token的响应会被自动解压,JObject.Parse()可正常解析内容,登录功能即可恢复。

补充说明

  • 该方案仅通过配置扩展解决问题,无需修改或替换FacebookAuthenticationHandler源码,符合“不替换自定义代码”的要求。
  • Google登录正常是因为Google API响应未强制启用压缩,或Google认证模块的默认HttpClient已配置自动解压逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 19:02:33