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

基于Firebase的Android Apple登录:获取含sub的JWT方法

获取Firebase登录后的JWT(含sub字段)

在Android平台通过startActivityForSignInWithProvider完成登录拿到AuthResult后,可按以下步骤获取包含sub字段的JWT:

  1. 从AuthResult获取FirebaseUser实例
    登录成功后,AuthResult对象包含当前登录的用户实例,直接通过authResult.getUser()获取即可。

  2. 调用getIdToken()获取JWT令牌
    调用FirebaseUser.getIdToken()方法,该方法返回Task<GetTokenResult>对象,通过监听任务完成事件获取最终的JWT字符串:

Kotlin示例

authResult.user?.getIdToken(true) // true表示强制刷新令牌,按需设置
    ?.addOnCompleteListener { task ->
        if (task.isSuccessful) {
            val jwtToken = task.result?.idToken
            // jwtToken就是包含sub字段的JWT字符串
            // 若仅需唯一标识,直接使用authResult.user.uid即可(与sub字段值一致)
        } else {
            // 处理令牌获取失败逻辑
            val exception = task.exception
            // 异常处理
        }
    }

Java示例

FirebaseUser user = authResult.getUser();
if (user != null) {
    user.getIdToken(true)
        .addOnCompleteListener(task -> {
            if (task.isSuccessful()) {
                String jwtToken = task.getResult().getIdToken();
                // jwtToken即为包含sub字段的JWT
                // sub字段值等价于user.getUid()
            } else {
                // 处理错误
                Exception exception = task.getException();
                // 异常处理
            }
        });
}
  1. 关于sub字段的说明
  • JWT的payload部分包含sub字段,其值与FirebaseUser.getUid()返回的用户唯一ID完全一致,是跨平台通用的用户标识符,不受邮箱是否隐藏的影响。
  • getIdToken()方法中的true参数用于强制从Firebase服务器刷新令牌,若不需要强制刷新,可传入false或省略(默认值为false)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:15:43