【问题标题】:How to decode access token and get username and email in java?如何在java中解码访问令牌并获取用户名和电子邮件?
【发布时间】:2021-05-14 11:51:51
【问题描述】:

如何从令牌中获取姓名和电子邮件。

使用 jwt.io 的令牌结构 http://prntscr.com/yzyf2b

感谢任何帮助。

在以下帖子的帮助下更新完整的解决方案,以便归功于他们。

            String jwtToken = token;
            System.out.println("------------ Decode JWT ------------");
            String[] split_string = jwtToken.split("\\.");
            String base64EncodedHeader = split_string[0];
            String base64EncodedBody = split_string[1];
            String base64EncodedSignature = split_string[2];

            System.out.println("~~~~~~~~~ JWT Header ~~~~~~~");
            Base64 base64Url = new Base64(true);
            String header = new String(base64Url.decode(base64EncodedHeader));
            System.out.println("JWT Header : " + header);

            System.out.println("~~~~~~~~~ JWT Body ~~~~~~~");
            String body = new String(base64Url.decode(base64EncodedBody));
            System.out.println("JWT Body : " + body);

            JSONObject jsonObject = new JSONObject(body);
            System.out.println(jsonObject.get("email"));
            System.out.println(jsonObject.get("name"));
        

【问题讨论】:

    标签: java encryption jwt base64 keycloak


    【解决方案1】:

    JWToken 具有以下结构 Header.Body.Signature。因此,首先您应该将令牌分成三部分,即HeaderBodySignature

    你可以使用

    String[] token_part = jwtToken.split("\\.");
    

    然后应用您已经完成的操作,但对于 token_part[1]有效负载或正文),即:

    sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
    String a = new String(decoder.decodeBuffer(token_part[1]));
    

    解码部分,也可以试试this SO thread

    之后,您可以使用org.json.JSONObject 来解析 JSON。一个例子:

    public class Token {
    
        public static void main(String[] args) {
            String token = "{\"name\":\"john doe\", \"email\": \"john@mail.com\"}";
            JSONObject jsonObject = new JSONObject(token);
            System.out.println(jsonObject.get("email"));
            System.out.println(jsonObject.get("name"));
        }
    }
    

    输出:

    john@mail.com
    john doe
    

    完整示例:

        String jwtToken = token;
        System.out.println("------------ Decode JWT ------------");
        String[] split_string = jwtToken.split("\\.");
        String base64EncodedHeader = split_string[0];
        String base64EncodedBody = split_string[1];
        String base64EncodedSignature = split_string[2];
    
        System.out.println("~~~~~~~~~ JWT Header ~~~~~~~");
        Base64 base64Url = new Base64(true);
        String header = new String(base64Url.decode(base64EncodedHeader));
        System.out.println("JWT Header : " + header);
    
        System.out.println("~~~~~~~~~ JWT Body ~~~~~~~");
        String body = new String(base64Url.decode(base64EncodedBody));
        System.out.println("JWT Body : " + body);
    
        JSONObject jsonObject = new JSONObject(body);
        System.out.println(jsonObject.get("email"));
        System.out.println(jsonObject.get("name"));
    

    【讨论】:

      猜你喜欢
      • 2013-02-12
      • 2021-03-20
      • 2017-05-22
      • 1970-01-01
      • 2020-10-10
      • 2018-07-14
      • 2018-09-05
      • 1970-01-01
      • 2021-01-05
      相关资源
      最近更新 更多