首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查承载令牌是否为jwt

检查承载令牌是否为jwt
EN

Stack Overflow用户
提问于 2020-07-06 06:44:26
回答 4查看 5.2K关注 0票数 3

对于http请求,我有两种类型的令牌。一个在授权头中有一个JWT令牌,另一个有一个固定长度的oauth令牌。根据令牌的类型,我想执行一些操作。我该如何区分它们?

我试过了

代码语言:javascript
复制
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");
      }
    }
}

但这并不像预期的那样有效。有图书馆做这个吗?或者我们可以修改上面的正则表达式吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-07-06 07:24:31

您可以采用其他方法。JWT令牌包含三个parts.Header信息,包括类型和算法、有效负载和签名。头和体部分是Base64编码的。如果您解码标题部分,您将令牌类型。

在您的示例中,令牌是eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1MTYyMzkwMjJ9tbD.epxpstvGdW8TC3G8zg4B6rUYAOvfzdceoH48wgRQ

所以头部分是eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9,解码后,您可以从解码后的值中获得{"alg":"HS256","typ":"JWT"},您可以确定它是否是jwt令牌。

票数 5
EN

Stack Overflow用户

发布于 2020-07-06 07:24:16

我认为我们可以这样检查令牌是否为jwt:

  • 检查jwt是否可以被“拆分”。分为三个部分(标题、有效载荷、签名)
  • 检查标头,如果它可以被base64 64解码。
  • 检查解码头中的令牌类型,如果是jwt的话

报头通常由两部分组成:令牌的类型(即JWT )和正在使用的签名算法(如HMAC SHA256或RSA )。 例如: { "alg":"HS256","typ":" JWT“}然后,这个Base64Url被编码成JWT的第一部分。

https://jwt.io/introduction/

票数 4
EN

Stack Overflow用户

发布于 2020-07-06 07:25:18

后续regexp似乎正在发挥作用:

代码语言:javascript
复制
    String pattern = "^[A-Za-z0-9-_=]+\\.[A-Za-z0-9-_=]+\\.[A-Za-z0-9-_.+/=]*$";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62750614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档