java - 检查不记名 token 是否为 jwt

标签 java spring-boot jwt

我有两种类型的 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/

相关文章:

spring-boot - Spring-Boot 是否处理 WebFlux 上下文之外的 Kotlin 协程?

spring-boot - Kotlin 1.3 + Spring Boot : There is already '...' bean method

java - spring boot xa事务数据源和jms

java - 在 HTTP 连接中使用基于 token 的身份验证时如何防止重放攻击

rest - JWT-GO 错误 4 和来自另一个 api url 的 token 验证

java - 在 Java 中修改私有(private)实例变量

Java 在数组中搜索所有可能的组合列表(算法)

java - 如何在 JBOSS EAP6.4 的自定义模块后使用 Spring Boot 应用程序使用自定义 module.xml 并进行部署

javascript - 没有过载匹配此调用。最后一个重载给出了以下错误。输入 '"文本 "' is not assignable to type ' “json”'

java - 如何保存RecyclerView滚动位置?当应用程序关闭时