对于http请求,我有两种类型的令牌。一个在授权头中有一个JWT令牌,另一个有一个固定长度的oauth令牌。根据令牌的类型,我想执行一些操作。我该如何区分它们?
我试过了
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");
}
}
}但这并不像预期的那样有效。有图书馆做这个吗?或者我们可以修改上面的正则表达式吗?
发布于 2020-07-06 07:24:31
您可以采用其他方法。JWT令牌包含三个parts.Header信息,包括类型和算法、有效负载和签名。头和体部分是Base64编码的。如果您解码标题部分,您将令牌类型。
在您的示例中,令牌是eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1MTYyMzkwMjJ9tbD.epxpstvGdW8TC3G8zg4B6rUYAOvfzdceoH48wgRQ
所以头部分是eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9,解码后,您可以从解码后的值中获得{"alg":"HS256","typ":"JWT"},您可以确定它是否是jwt令牌。
发布于 2020-07-06 07:24:16
我认为我们可以这样检查令牌是否为jwt:
报头通常由两部分组成:令牌的类型(即JWT )和正在使用的签名算法(如HMAC SHA256或RSA )。 例如: { "alg":"HS256","typ":" JWT“}然后,这个Base64Url被编码成JWT的第一部分。
发布于 2020-07-06 07:25:18
后续regexp似乎正在发挥作用:
String pattern = "^[A-Za-z0-9-_=]+\\.[A-Za-z0-9-_=]+\\.[A-Za-z0-9-_.+/=]*$";https://stackoverflow.com/questions/62750614
复制相似问题