首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在android中解码JWT token?

如何在android中解码JWT token?
EN

Stack Overflow用户
提问于 2016-06-08 15:26:19
回答 8查看 46.1K关注 0票数 32

我有一个这样的jwt令牌

代码语言:javascript
复制
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

我如何解码它才能获得这样的有效载荷

代码语言:javascript
复制
{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

我用过this库,但是找不到我想要的方法

EN

回答 8

Stack Overflow用户

发布于 2016-08-04 02:22:29

你应该拆分字符串:如果你通过一个base64解码器传递前两个部分,你将得到以下内容(为清晰起见增加了格式):

标题

代码语言:javascript
复制
{
  "alg": "HS256",
  "typ": "JWT"
}

正文

代码语言:javascript
复制
    {
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

代码示例:

代码语言:javascript
复制
public class JWTUtils {

    public static void decoded(String JWTEncoded) throws Exception {
        try {
            String[] split = JWTEncoded.split("\\.");
            Log.d("JWT_DECODED", "Header: " + getJson(split[0]));
            Log.d("JWT_DECODED", "Body: " + getJson(split[1]));
        } catch (UnsupportedEncodingException e) {
            //Error
        }
    }

    private static String getJson(String strEncoded) throws UnsupportedEncodingException{
        byte[] decodedBytes = Base64.decode(strEncoded, Base64.URL_SAFE);
        return new String(decodedBytes, "UTF-8");
    }
}

调用方法,例如

代码语言:javascript
复制
JWTUtils.decoded("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ");

图书馆参考:https://github.com/jwtk/jjwt

jwt测试:https://jwt.io/

票数 71
EN

Stack Overflow用户

发布于 2017-03-16 21:30:51

我使用了一个名为JWTDecode.Android https://github.com/auth0/JWTDecode.Android的第三方库。文档相当不错。从你的问题看,潜艇、名字等都是身体的一部分,被称为索赔。您可以使用上面的库来获取它们:

代码语言:javascript
复制
  JWT parsedJWT = new JWT(jwtToken);
  Claim subscriptionMetaData = parsedJWT.getClaim("name");
  String parsedValue = subscriptionMetaData.asString();
票数 8
EN

Stack Overflow用户

发布于 2017-05-16 03:24:03

这是使用Java8的Base64类实现的:

代码语言:javascript
复制
public String getDecodedJwt(String jwt)
{
  String result = "";

  String[] parts = jwt.split("[.]");
  try
  {
    int index = 0;
    for(String part: parts)
    {
      if (index >= 2)
        break;

      index++;
      byte[] partAsBytes = part.getBytes("UTF-8");
      String decodedPart = new String(java.util.Base64.getUrlDecoder().decode(partAsBytes), "UTF-8");

      result += decodedPart;
    }
  }
  catch(Exception e)
  {
    throw new RuntimeException("Couldnt decode jwt", e);
  }

  return result;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37695877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档