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

Android端基于Firebase实现Apple账号授权撤销方案问询

Android端Firebase Apple账号权限撤销方案

方案一:自定义Apple OAuth2流程获取Authorization Code

Firebase默认的Apple登录流程不会返回Authorization Code,需要自行实现Apple的OAuth2授权流程,同时完成Firebase认证:

  • 在Apple开发者后台配置Android应用:创建Service ID并启用「Sign In with Apple」,绑定应用包名和签名指纹,记录Service ID(即Client ID)和Team ID。
  • 使用AppAuth库发起授权请求,指定scope为openid email,引导用户完成Apple登录后即可获取Authorization Code。
  • 拿到Authorization Code后,调用Firebase认证接口完成登录,同时将Code加密存储(如本地SharedPreferences或Firebase云端):
    // 用Authorization Code生成Firebase凭证
    val credential = OAuthProvider.newBuilder("apple.com")
        .setAuthorizationCode(authorizationCode)
        .build()
    FirebaseAuth.getInstance().signInWithCredential(credential)
        .addOnCompleteListener { task ->
            if (task.isSuccessful) {
                // 保存Authorization Code到安全位置
            }
        }
    
  • 撤销权限时,使用存储的Authorization Code,结合Apple开发者私钥生成JWT签名,向https://appleid.apple.com/auth/revoke发送POST请求,参数包含:
    • client_id:你的Service ID
    • token:存储的Authorization Code
    • token_type_hint:authorization_code

方案二:通过Firebase获取Apple Refresh Token实现撤销

如果不想自定义OAuth流程,可以通过请求offline_access scope让Firebase返回Apple的Refresh Token,再用该Token调用撤销API:

  • 发起Firebase Apple登录时,添加offline_access scope:
    val provider = OAuthProvider.newBuilder("apple.com")
    // 添加所需scope
    provider.addCustomParameter("scope", "openid email offline_access")
    // 启动登录流程
    FirebaseAuth.getInstance().startActivityForSignInWithAuth(activity, provider.build())
        .addOnCompleteListener { task ->
            if (task.isSuccessful) {
                // 获取用户信息
                val user = task.result?.user
                // 从Provider数据中提取Apple的Refresh Token
                val appleProvider = user?.providerData?.firstOrNull { it.providerId == "apple.com" }
                val refreshToken = appleProvider?.refreshToken
                // 加密存储Refresh Token
            }
        }
    
  • 撤销权限时,使用Refresh Token调用Apple的撤销API,请求参数调整为:
    • token:存储的Refresh Token
    • token_type_hint:refresh_token
      其余参数(client_id、JWT签名)与方案一一致。

关键注意事项

  • Apple的撤销API要求请求必须用JWT签名,签名需使用Apple开发者后台下载的私钥,JWT的Claim需包含:iss(Team ID)、iat(当前时间戳)、exp(过期时间戳,最长1小时)、aud(固定为https://appleid.apple.com)、sub(Service ID)。
  • 开发者私钥绝对不能暴露在客户端代码中,建议将JWT生成和撤销请求逻辑放在后端服务,客户端调用自有后端接口完成权限撤销。
  • 存储Authorization Code或Refresh Token时必须加密,避免敏感信息泄露。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:25:22