我有两种用于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");
}
}
}
,但无法正常工作。有图书馆吗?还是可以修改上面的正则表达式?
答案 0 :(得分:2)
您可以采用其他方法。 JWT令牌包括三部分:头信息,包含类型和算法,有效负载和签名。标头和正文部分是Base64编码的。如果您解码标题部分,则将标记类型。
在您的示例令牌中,eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1MTYyMzkwMjJ9tbD.epxpstvGdW8TC3G8zg4B6rUYAOvfzdceoH48wgRQ
所以标头部分是eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
解码后,您将得到{"alg":"HS256","typ":"JWT"}
从解码后的值中,您可以确定它是否是jwt令牌
答案 1 :(得分:1)
我认为我们可以通过这种方式检查令牌是否为jwt:
标头通常由两部分组成: 令牌(即JWT)和所使用的签名算法,例如 HMAC SHA256或RSA。
例如:
{“ alg”:“ HS256”,“ typ”:“ JWT”}然后,此JSON为Base64Url 进行编码以形成JWT的第一部分。
答案 2 :(得分:0)
following regexp似乎可以正常工作:
String pattern = "^[A-Za-z0-9-_=]+\\.[A-Za-z0-9-_=]+\\.[A-Za-z0-9-_.+/=]*$";
答案 3 :(得分:0)
此正则表达式应该起作用:
String pattern="^[A-Za-z0-9\\-_=]+\\.[A-Za-z0-9\\-_=]+(\\.[A-Za-z0-9\\-_.+/=]+)?$";