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

非Android/网页环境下,Kotlin脚本如何登录Firebase用户并获取JWT?

问题:非Android/Kotlin脚本中获取Firebase用户JWT用于负载测试

我已有现成的Firebase配置、应用及后端,正在编写Kotlin脚本(用于后端的Gatling负载测试)。目前可以通过Firebase Admin SDK创建测试用户:

val userRecord = FirebaseAuth.getInstance().createUser(
    UserRecord.CreateRequest()
        .setUid(test_uid)
        .setDisplayName(test_displayName)
        .setEmail(test_email)
        .setPassword(test_password)
        .setEmailVerified(true)
)

但需要登录该用户并获取Firebase生成的JWT(ID Token),才能向后端API发起认证请求。Android应用中常用的signInWithEmailAndPassword方法在firebase-admin包中不可用,而客户端firebase-auth包在纯JVM环境中兼容不佳,求可行实现思路。


可行解决方案

1. 直接调用Firebase Auth REST API获取ID Token

Firebase提供了REST接口用于用户登录,无需依赖客户端SDK,适合纯JVM环境:

步骤:

  • 找到Firebase项目的Web API Key:进入Firebase控制台 → 项目设置 → 一般 → 对应Web应用的API密钥
  • 发送POST请求到https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword,携带以下参数:
    • email: 测试用户邮箱
    • password: 测试用户密码
    • returnSecureToken: true(必填,用于返回ID Token)
    • key: 你的Web API Key

Kotlin代码示例(使用OkHttp):

import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.RequestBody.Companion.toRequestBody
import com.google.gson.JsonObject

val client = OkHttpClient()
val mediaType = "application/json; charset=utf-8".toMediaType()

// 构造请求体
val requestBody = JsonObject().apply {
    addProperty("email", test_email)
    addProperty("password", test_password)
    addProperty("returnSecureToken", true)
}.toString().toRequestBody(mediaType)

// 发送请求
val request = Request.Builder()
    .url("https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=YOUR_WEB_API_KEY")
    .post(requestBody)
    .build()

client.newCall(request).execute().use { response ->
    if (response.isSuccessful) {
        val responseBody = response.body?.string()
        // 解析获取idToken
        val json = com.google.gson.JsonParser.parseString(responseBody).asJsonObject
        val idToken = json.get("idToken").asString
        // 使用idToken调用后端API
    }
}

2. 用Admin SDK生成自定义Token再兑换成ID Token

如果需要更灵活的用户标识(比如自定义Claims),可以先通过Admin SDK生成自定义Token,再兑换为标准ID Token:

步骤:

  1. 用Admin SDK生成自定义Token:
val customToken = FirebaseAuth.getInstance().createCustomToken(test_uid)
  1. 发送POST请求到https://identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken,携带参数:
    • token: 生成的自定义Token
    • returnSecureToken: true
    • key: Web API Key

Kotlin代码示例:

// 构造请求体
val requestBody = JsonObject().apply {
    addProperty("token", customToken)
    addProperty("returnSecureToken", true)
}.toString().toRequestBody(mediaType)

val request = Request.Builder()
    .url("https://identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken?key=YOUR_WEB_API_KEY")
    .post(requestBody)
    .build()

client.newCall(request).execute().use { response ->
    if (response.isSuccessful) {
        val json = com.google.gson.JsonParser.parseString(response.body?.string()).asJsonObject
        val idToken = json.get("idToken").asString
        // 使用idToken
    }
}

注意事项

  • 确保测试用户的emailVerified已设为true(如你创建用户时的设置),否则部分登录场景会受限
  • Web API Key需要妥善保管,避免泄露
  • Gatling脚本中可以将这些逻辑封装为方法,在场景初始化时批量生成ID Token供测试使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 20:57:04