有没有简单的方法来验证和解码React Native中的JWT?

时间:2017-09-16 17:40:18

标签: javascript react-native jwt

是否有任何库/ NPM模块/代码示例可以在React Native中验证和解码JWT?

我知道我可以手动完成。但我希望有node-jsonwebtoken之类的东西存在。 (它在React Native中不起作用。)

https://github.com/auth0/jwt-decode仅解码但未验证。

1 个答案:

答案 0 :(得分:1)

虽然它使用了一些用纯JS编写的相当大且速度慢的加密库,但是RSA-Sign JavaScript Library能够达到你想要的效果。

如果您想稍微努力以获得更简单,更快速的结果,请使用Wep Crypto API让浏览器为您验证签名。确切的代码将取决于密钥算法和格式,但基本上你解码JWT底部的base64url编码签名,然后用crypto.subtle.importKey作为最后一个参数调用["verify"](传递密钥以JWK格式或您可以获得的任何其他格式),然后使用生成的密钥来调用crypto.subtle.verify。您需要将(已解码的)令牌的签名转换为ArrayBuffer,这可以通过以下方式完成:

buffer = new Uint8Array([...signature].map(c => c.charCodeAt(0)))

避免在同一网络上取得密钥,并且在验证签名之前(如果该密钥由' jku'或在令牌的' jwk'头字段中给出),因为在浏览器中验证其完整性相当棘手。如果您可以在手动检查后在源代码中对其进行硬编码,那就更好了。