小编And*_*son的帖子

如何使用 Web Crypto API 的 SubtleCrypto 验证已签名的 JWT?

我正在尝试使用 Web Crypto API 的 SubtleCrypto 接口验证 JWT 的签名。

我的代码不会验证令牌签名,而 JWT.io 上的调试工具会,我不知道为什么。这是我的验证功能:

function verify (jwToken, jwKey) {
  const partialToken = jwToken.split('.').slice(0, 2).join('.')
  const signaturePart = jwToken.split('.')[2]
  const encoder = new TextEncoder()
  return window.crypto.subtle
    .importKey('jwk', jwKey, { 
         name: 'RSASSA-PKCS1-v1_5', 
         hash: { name: 'SHA-256' } 
       }, false, ['verify'])
    .then(publicKey =>
      window.crypto.subtle.verify(
        { name: 'RSASSA-PKCS1-v1_5' },
        publicKey,
        encoder.encode(atob(signaturePart)),
        encoder.encode(partialToken)
      ).then(isValid => alert(isValid ? 'Valid token' : 'Invalid token'))
    )
}
Run Code Online (Sandbox Code Playgroud)

我希望该代码能够工作并提供对正确签名的 JWT 的肯定验证。相反,示例代码无法验证签名令牌。这个例子在我的 Chrome 71 中失败了。

我还使用来自 RFC 7520 的示例数据设置了一些测试

javascript jwt webcrypto-api

4
推荐指数
1
解决办法
1736
查看次数

标签 统计

javascript ×1

jwt ×1

webcrypto-api ×1