ASP.NET Core请求Facebook长时令牌遇“验证码格式无效”错误排查
问题解答
错误含义
Invalid verification code format 本质是Facebook判定你传入的授权码(authorizationCode)不符合预期格式,或是授权码本身无效(Facebook的错误提示有时会将无效码归类为格式错误)。
常见原因及排查方向
- 授权码已过期/重复使用:Facebook的短时授权码仅支持单次使用,且有效期仅约10分钟。如果前端返回的码已经被用过,或者超过有效期,就会触发这个错误。
- Redirect URI不匹配:兑换长时令牌时的
redirect_uri必须与前端发起Facebook登录请求时使用的redirect_uri完全一致——包括大小写、末尾斜杠、甚至携带的参数(如果有的话)。哪怕细微差异,FB都会拒绝请求,有时就会返回格式错误。 - 授权码传输过程中被篡改/截断:检查前端传递的
authorizationCode是否完整,有没有因为前端编码错误(比如重复URL编码)、或者HTTP传输时丢失特殊字符(如#、&)导致后端接收到的码不完整。
与商业验证/应用访问验证的关系
这个错误和Facebook商业验证、应用访问验证没有直接关联。这两类验证未通过时,通常会返回权限受限、API调用被拒绝类的错误,而非授权码格式错误。只有当你的应用处于沙盒模式且未添加测试用户时,可能会影响登录流程,但不会直接触发这个格式错误。
代码优化建议
Facebook的令牌兑换端点推荐使用POST请求传递参数(而非手动拼接GET请求的QueryString),这样能避免编码遗漏、参数过长等问题:
var httpClient = _httpClientFactory.CreateClient(); var formData = new FormUrlEncodedContent(new Dictionary<string, string> { { "client_id", clientId }, { "redirect_uri", redirectUri }, { "client_secret", clientSecret }, { "code", authorizationCode }, { "state", companyId } }); var tokenResponse = await httpClient.PostAsync(FacebookTokenUrl, formData);
内容的提问来源于stack exchange,提问作者Karol Trzaska
相关产品推荐
相关产品推荐

