bha*_*anu 3 java jwt spring-boot
我有两种类型的令牌用于 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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
但这并没有按预期工作。有没有这样做的图书馆?或者我们可以修改上面的正则表达式吗?
小智 7
您可以采用替代方法。JWT 令牌由三部分组成:包含类型和算法的标头信息、有效负载和签名。标头和正文部分采用 Base64 编码。如果您解码标头部分,您将标记类型。
从你的示例令牌是eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1MTYyMzkwMjJ9tbD.epxpstvGdW8TC3G8zg4B6rUYAOvfzdceoH48wgRQ
所以标头部分是 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 解码后您将得到{"alg":"HS256","typ":"JWT"}
从解码值您可以确定它是否是 jwt 令牌
小智 5
我认为我们可以通过以下方式检查令牌是否为 jwt:
标头通常由两部分组成:令牌的类型(JWT)和所使用的签名算法(例如 HMAC SHA256 或 RSA)。
例如:
{ "alg": "HS256", "typ": "JWT" } 然后,对该 JSON 进行 Base64Url 编码以形成 JWT 的第一部分。
| 归档时间: |
|
| 查看次数: |
8756 次 |
| 最近记录: |