Fra*_*333 4 java encryption base64 jwt keycloak
我如何从令牌中获取姓名和电子邮件。
使用 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"));
Run Code Online (Sandbox Code Playgroud)
JWToken 具有以下结构Header.Body.Signature。因此,首先应该将令牌分为三个部分,即Header、Body和Signature。
为此你可以使用
String[] token_part = jwtToken.split("\\.");
Run Code Online (Sandbox Code Playgroud)
然后应用您已经完成的操作token_part[1](即有效负载或主体),即:
sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
String a = new String(decoder.decodeBuffer(token_part[1]));
Run Code Online (Sandbox Code Playgroud)
对于解码部分,您也可以尝试这个 SO 线程。
之后,您可以使用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"));
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
john@mail.com
john doe
Run Code Online (Sandbox Code Playgroud)
完整示例:
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"));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4497 次 |
| 最近记录: |