我一直在第一次使用jsonwebtoken(https://github.com/auth0/node-jsonwebtoken)实现JWT。为此,我需要一个秘密值。
是否有推荐的命令或站点来生成足够好的命令?
我找到了该页面(https://security.stackexchange.com/questions/95972/what-are-requirements-for-hmac-secret-key),其中详细介绍了一个秘密应该持续多长时间(答案似乎是256位),但是您可以从哪里得到 从? :)
其他似乎另一种选择是使用公钥/私钥对。他们似乎更喜欢我在本指南中找到的这种方法:https://medium.com/@siddharthac6/json-web-token-jwt-the-right-way-of-implementing-with-node-js-65b8915d550e,因为那个人说他开始使用字符串,然后切换为使用密钥对。 然而的复杂之处在于它将在Lambda上运行,因此理想情况下,我希望机密(字符串或密钥)位于环境变量中。 不保存为文件。但是,如果将证书放在环境变量中,我想知道AWS是否会删除换行符,并在Node尝试使用它时搞砸它。因此,我认为秘密字符串会更简单-只要足够强。
谢谢!
答案 0 :(得分:1)
这就是我所做的-使用JWT2实现HapiJS时,我根据它们提供的文档生成了一个密钥。 their repo认为,这是生成安全密钥以进行JWT签名的最简单方法之一。
node -e 'console.log(require('crypto').randomBytes(256).toString('base64'));
我认为您不必将非对称密钥身份验证与JWT的公共/私有密钥一起使用。最简单的形式是,当用户登录系统时,系统会为他们提供用户数据的哈希值。在客户端,您可以在每个请求的授权标头中提供该哈希。服务器将检查哈希以验证完整性。由于您拥有哈希所针对的密钥,因此他们极不可能创建伪造的哈希。
查看this link到GitHub问题,他们讨论为Hapi-auth-JWT2生成密钥。