我有两种类型的 token 用于 http 请求。一个在授权 header 中有一个 JWT token ,另一个有一个固定长度的 oauth token 。 根据 token 的类型,我想执行一些操作。如何区分它们?
我试过了
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main
{
public static void main(String[] args) {
String pattern="^[A-Za-z0-9-_=]+\\.[A-Za-z0-9-_=]+\\.^[A-Za-z0-9-_.+/=]*$";
String line="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1MTYyMzkwMjJ9tbD.epxpstvGdW8TC3G8zg4B6rUYAOvfzdceoH48wgRQ";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);
if (m.find( )) { //is jwt
System.out.println("jwt token");
}else {
System.out.println("NOt jwt");
}
}
}
但这并没有按预期工作。有没有这样做的图书馆?或者我们可以修改上面的正则表达式吗?
最佳答案
您可以采用其他方法。 一个 JWT token 包含三个部分。包含类型和算法、有效负载和签名的 header 信息。 Header 和 Body 部分是 Base64 编码的。如果您解码标题部分,您将使用 token 类型。
您的示例 token 是 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1MTYyMzkwMjJ9tbD.epxpstvGdW8TC3G8zg4B6rUYAOvfzdceoH48wgRQ
所以标题部分是 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
解码后你会得到 {"alg":"HS256","typ":"JWT"}
从解码后的值可以判断它是否是 jwt token
关于java - 检查不记名 token 是否为 jwt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62750614/