解码令牌 JWT android kotlin?

Gab*_*ski 0 android key token jwt kotlin

我有一个这样的令牌:

hereeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJvcGVyYWRvciI6eyJpZCI6NzAsIm5vbWUiOiJERUlWSVRJIiwidXN1YXJpbyI6IkRFSVZJVEkifSwiaWF0IjoxNjI5ODEyNDA1fQ.JqzQnFSbG6gFsnlJu3-bezxZ_N5e5FEzc9QvpRGu0u4
Run Code Online (Sandbox Code Playgroud)

把它藏起来:

 alg: "HS256",
 typ: "JWT"
}.

 operador: {
  id: 20,
  nome: "JOAO",
  usuario: "JOAO"
 },
 iat: 1629812405
}
Run Code Online (Sandbox Code Playgroud)

问题是如何在 android kotlin 上获取仅用户 ID 以在某些任务中使用?

Gab*_*ski 6

我刚刚解决了这个问题,感谢这个:

private fun decodeToken(jwt: String): String {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) return "Requires SDK 26"
    val parts = jwt.split(".")
    return try {
        val charset = charset("UTF-8")
        val header = String(Base64.getUrlDecoder().decode(parts[0].toByteArray(charset)), charset)
        val payload = String(Base64.getUrlDecoder().decode(parts[1].toByteArray(charset)), charset)
        "$header"
        "$payload"
    } catch (e: Exception) {
        "Error parsing JWT: $e"
    }
}
Run Code Online (Sandbox Code Playgroud)

然后 :

val mDecode = decodeToken(mToken)
val test = JSONObject(mDecode).getString("operador")
val mDecodeTokenOk = JSONObject(test).getString("id")
/** SALVANDO ID_OPERADOR */
mSharedPreferences.saveString(WmsConstantes.ID_OPERADOR,mDecodeTokenOk)
Log.e("------------------>", mDecodeTokenOk.toString());
Run Code Online (Sandbox Code Playgroud)