Facebook iOS/Android登录SDK如何使用App Secret 开启强制要求有何影响
Facebook移动端登录相关问题解答
问题1:Facebook的iOS与Android端登录SDK是如何使用App Secret的?
- 官方发布的iOS、Android端Facebook登录SDK 全程不会使用App Secret,也不要求开发者在客户端代码、项目配置中填入App Secret。
- 移动端SDK的登录流程仅需提前配置
App ID、对应平台的URL Scheme/Asset Links等公开参数即可正常运行,所有和Facebook服务端的交互逻辑都不会涉及App Secret的读取、传输或计算。
问题2:若我为自身的Facebook应用开启了「Require App Secret」设置,会产生什么后果?从Facebook官方下载的移动端SDK会受到哪些影响?
- 开启该设置后,所有向Facebook Graph API发起的请求,都必须额外携带
appsecret_proof参数:该参数需要用App Secret作为密钥,对当前请求使用的用户访问令牌做HMAC-SHA256哈希生成,校验不通过的请求会直接被Facebook拒绝。 - 官方移动端SDK默认不会生成、也无法合法生成
appsecret_proof参数,开启设置后所有从移动端SDK发起的Graph API请求都会返回权限错误,包括登录后默认拉取用户基础信息的请求都会直接失败。 - 若强行在客户端内置App Secret生成
appsecret_proof,会存在App Secret被反编译、抓包窃取的极高风险,一旦泄露攻击者可以直接操作你的Facebook应用后台、伪造任意请求。
问题3:我在Facebook安全相关文档中了解到不应将App Secret放置在客户端,那么为何Facebook官方文档说明仅在客户端完成全部操作即可走通完整登录流程?
- Facebook移动端登录采用带PKCE校验的OAuth 2.0授权码流程,该流程本身就是为无法安全存储密钥的公开客户端(移动端、前端页等)设计的,全程不需要App Secret参与:用户通过Facebook官方应用/网页完成授权后,Facebook服务端会直接向客户端发放合法的用户访问令牌,不需要服务端介入验证,因此仅客户端就能完成完整登录流程。
- 官方文档提到的纯客户端登录流程默认未开启「Require App Secret」设置,这种场景下拿到的访问令牌可以直接调用基础的Graph API接口,不需要
appsecret_proof校验,符合安全规范。 - 若开启了「Require App Secret」,则必须加一层自有服务端做转发:客户端把访问令牌传给自有服务端,由服务端存储App Secret、生成
appsecret_proof后再向Facebook发起请求,避免App Secret泄露。
内容的提问来源于stack exchange,提问作者Ghassan Barghouti
相关产品推荐
相关产品推荐

