【发布时间】:2020-04-26 16:18:53
【问题描述】:
我想检索 JWT 有效负载上的值,即我从登录结果中获得的令牌。当我尝试将令牌发送到服务器时,它是无效的,结果证明后端服务器没有验证令牌的代码。结果,我必须解码并声明令牌以获取值“id”、“username”和“email”。
我尝试过使用 jwt.io 库以及其他不起作用的库。是否有其他方法可以让我通过其他方式获取值 id、用户名和电子邮件?
Login API 的 JSON 响应。
令牌:
eyJ0eXAiOiJKV1QiLCJhbGciOiJITUFDLVNIQTI1NiJ9.eyJpZCI6IjQ3NiIsImVtYWlsIjoiZHdpZml0cmlAZXhhbXBsZS5jb20iLCJtc2lzZG4iOiIwODk3MjIzNTQ5NjIiLCJ1c2VybmFtZSI6ImR3aWZpdHJpIiwicHJvZmlsZSI6eyJpZCI6IjI5MyIsImlkX2dlb2RpcmVjdG9yeSI6bnVsbCwiZnVsbG5hbWUiOiJkd2lmaXRyaSIsIm51bWJlciI6IjY5MDkzNyJ9fQ.cmPcQKouBSz_RVFUDWBE4-kDqard-ZfD5T0wBloOlGQ
用于解码令牌的代码。
DecodedJWT jwtIdent = JWT.decode(token);
Toast.makeText(getActivity(), "this decode" + jwtIdent, Toast.LENGTH_SHORT).show();
【问题讨论】:
-
那么为什么解码不起作用?有什么错误吗?解码非常简单,因为它只是 base64url 编码。解码后,您会得到一个 JSON,您可以将其转换为对象。因此,对于解码,您不需要特定的 JWT 库。我不明白的一件事是:为什么后端无法验证令牌以及为什么后端无法验证时必须在前端对其进行解码?谁创建了令牌?
-
是的,我也不明白为什么我使用的后端无法验证令牌。在我尝试令牌之前,我将它发送到服务器,但没有响应。我认为这是不验证令牌的后端制造商错误。因此我必须解码令牌,以便它可以成为对象值@jps
-
我已经使用 base64 解码,但它不起作用@jps
-
您必须分别解码部分(标头、有效负载),而不是一次解码整个令牌。我在jwt.io 上对其进行了解码,并注意到标题中有
alg的非标准值(“alg”:“HMAC-SHA256”)。通常应该是HS256。这可能是服务器验证失败的原因。