如何在java中解码访问令牌并获取用户名和电子邮件?
Posted
技术标签:
【中文标题】如何在java中解码访问令牌并获取用户名和电子邮件?【英文标题】:How to decode access token and get username and email in 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"));
【问题讨论】:
【参考方案1】:JWToken 具有以下结构 Header.Body.Signature
。因此,首先您应该将令牌分成三部分,即Header
、Body
和Signature
。
你可以使用
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"));
【讨论】:
以上是关于如何在java中解码访问令牌并获取用户名和电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章
验证电子邮件并注册用户后,如何在电子邮件上生成链接后获取令牌?
Android Facebook通过访问令牌获取登录的电子邮件地址