使用DRF+Flutter对接Facebook授权无法获取AccessToken求协助
问题描述
我使用DRF搭建后端、Flutter开发Android前端,实现Facebook授权流程。此前通过localhost:8000运行时一切正常,现在对接Flutter改用Wi-Fi IPv4地址(192.168.100.28),已生成SSL证书、通过防火墙允许访问,且完成以下配置:
- 开发者控制台添加了对应重定向URL
- 将IP地址加入DRF的
settings.py的ALLOWED_HOSTS列表
但仍遇到问题:
- 访问
https://192.168.100.28时,浏览器提示:
This server couldn't prove that it's 192.168.100.28; its security certificate does not specify Subject Alternative Names. This may be caused by a misconfiguration or an attacker intercepting your connection.
- 选择“Continue to 192.168.100.28 (unsafe)”继续后,依旧无法获取Facebook的access token
解决方案
1. 修复SSL证书的Subject Alternative Names问题
Facebook OAuth流程要求完全信任的HTTPS连接,即使手动跳过安全提示,浏览器/Android系统仍会拦截OAuth token交换请求。需重新生成包含目标IP的SSL证书:
- 创建自定义openssl配置文件(比如
openssl.cnf),添加Subject Alternative Name配置:[req] distinguished_name = req_distinguished_name x509_extensions = v3_ca prompt = no [req_distinguished_name] CN = 192.168.100.28 [v3_ca] subjectAltName = IP:192.168.100.28 - 用该配置重新生成证书:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -config openssl.cnf - 将新生成的证书导入Android设备的系统信任区,或在Flutter网络请求中配置信任该自签名证书
2. 核对Facebook开发者控制台配置
- 重定向URL必须完全匹配:确保是
https://192.168.100.28/[你的授权回调路径],注意HTTPS协议、端口(非443需明确)、路径后缀都不能出错 - 确认应用平台设置为
Android,并正确配置Android包名、签名哈希值(调试包需添加调试签名哈希,正式包对应发布签名哈希) - 若应用处于开发模式,需将当前测试用的Facebook账号添加到“测试用户”列表中
3. DRF后端配置检查
- 确保
settings.py中SECURE_SSL_REDIRECT = True,强制所有请求走HTTPS - 授权回调视图中,使用
request.build_absolute_uri()动态生成回调URL,避免硬编码导致的协议/地址不匹配 - 查看DRF日志,确认是否有请求被拒绝,或Facebook返回的具体错误信息(如
invalid redirect_uri、invalid client等)
4. Flutter前端调试
- 打印
LoginResult对象的error字段,获取Facebook授权流程的具体错误详情 - 核对Flutter Facebook登录插件的配置:应用ID、客户端token(若需)需与开发者控制台一致
- 测试Android模拟器能否正常访问
https://192.168.100.28的后端接口,排除网络连通问题
内容的提问来源于stack exchange,提问作者Praveen.S. Akki
相关产品推荐
相关产品推荐

