javascript - JavaScript 中更准确的 JWT token 正则表达式

标签 javascript jwt winston

我想加密日志中的 JWT token ,为此,我配置了winston.js 来集中此功能。例如,如果有人想要记录 JS 对象或字符串,他们只需记录它,如果该字符串包含 token ,它将自动加密。

我正在使用下面的正则表达式:

const JWT_TOKEN_REGEX = /[A-Za-z0-9-_=]+\.[A-Za-z0-9-_=]+\.?[A-Za-z0-9-_.+/=]*/g;

但是,当我从请求中获取查询字符串时

my-panel?issueId=10060&type=left&xdm_e=https%3A%2F%2Ftanriverdi.furkan.net&xdm_c=channel-abc.plugin.xyz__abc-issue-content-panel-3543924933333691153&cp=&xdm_deprecated_addon_key_do_not_use=abc.plugin.xyz&lic=none&cv=1001.0.0-SNAPSHOT&jwt=eyJ0eXAiOiJKV1QiOiJIUzI1NiJ9.eyJzdWIiOiI2MjQ2OWI5MDRmZTAxZDAwNmJhNzVjNDMiLCJxc2giOiI3YWE1YWVjN2NhOTM4Yzc0NmRmMmJkNmY2MTJiOTU4MmY5MzkxNWI1MzQzYmM1YTk4IiwiaXNzIjoiMzJmMTg4OTMtNzhkNi0zZmJiLWI3NzgtNmQ2OWU3YTU3NWM5IiwiY29udGV4dCI6e30sImV4cCI6MTY2NjYwMjkxMywiaWF0IjoxNjY2NjAyMDEzfQ.CpI-BZfqOM7Rmidv8e2L8G-rENSELnfEP96w

,所有带两个点的字符串都会被加密。

enter image description here

如何仅解析 JWT token 值?它们并不总是出现在查询字符串中,也不必以 jwt= 或类似内容开头。

我尝试自定义正则表达式,例如

every capturing group must contain at least 1 uppercase letter, 1 lowercase letter and 1 digit.

我无法成功过滤 JWT。

非常感谢任何建议!

最佳答案

您可以在规则中添加第一段和第二段必须以 eyJ 开头,因为 JWT 的 header 和负载是 Base64URL 编码的 JSON,并以 {" 开头>,即 Base64URL 中的 eyJ。在下面的示例中,我还删除了最后一个 . 之后的 ?,因此它必须始终为 3由 . 分隔的段。也不需要 =,因为 JWT 使用 Base64URL 编码而不进行填充:

const isJWT = (jwt) => {
  return String(jwt)
    .match(/eyJ[A-Za-z0-9-_]+\.eyJ[A-Za-z0-9-_]+\.[A-Za-z0-9-_.+/]*/g);
};


const jwt = "eyJ0eXAiOiJKV1QiOiJIUzI1NiJ9.eyJzdWIiOiI2MjQ2OWI5MDRmZTAxZDAwNmJhNzVjNDMiLCJxc2giOiI3YWE1YWVjN2NhOTM4Yzc0NmRmMmJkNmY2MTJiOTU4MmY5MzkxNWI1MzQzYmM1YTk4IiwiaXNzIjoiMzJmMTg4OTMtNzhkNi0zZmJiLWI3NzgtNmQ2OWU3YTU3NWM5IiwiY29udGV4dCI6e30sImV4cCI6MTY2NjYwMjkxMywiaWF0IjoxNjY2NjAyMDEzfQ.CpI-BZfqOM7Rmidv8e2L8G-rENSELnfEP96w"

if (isJWT(jwt)) console.log("it's a JWT!");

关于javascript - JavaScript 中更准确的 JWT token 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74180282/

相关文章:

node.js - 如何将 JSON 记录到控制台并让 cloudwatch 日志获取正确的元数据?

javascript - VS2017 Javascript 智能感知

java - Spring Security : Why . AuthorizeRequests().antMatchers ("/api/v1/web/**").permitAll() 不起作用?

javascript - 如何同时调用api?

ruby-on-rails - 领英 : Exchange JSAPI token to REST's OAuth token

asp.net-web-api - JwtAuthForWebAPI 中的 SignatureVerificationFailedException

node.js - 使用winston-mongodb后收到警告[当前服务器发现和监控引擎已被弃用]

node.js - 使用 winston 通过 Express Node.js 进行日志记录

javascript - 找不到模块 chai 尽管它存在于节点模块文件夹中

javascript - 在没有 animate() 的情况下选择 li 时,对 div 进行动画滑动