官方文档
https://jwt.io/introduction/

JWT 视频资料
https://ninghao.net/video/5026#info

JWT 进阶 – JJWT
https://blog.csdn.net/change_on/article/details/76279441

目前只支持HS256加密!
https://github.com/fwhezfwhez/jwt

python jwt 库
https://pyjwt.readthedocs.io/en/latest/index.html

Flask + flask-jwt 实现基于Json Web Token的用户认证授权
https://www.thatyou.cn/flask-flask-jwt-%E5%AE%9E%E7%8E%B0%E5%9F%BA%E4%BA%8Ejson-web-token%E7%9A%84%E7%94%A8%E6%88%B7%E8%AE%A4%E8%AF%81%E6%8E%88%E6%9D%83/

默认 JWT 的签名算法用的是 HS256 .. 这种算法在签名还有验证的时候用的是同一个密码 .. 这种叫对称算法 .. 我们也可以用 RS256 这种算法 .. 它是一种非对称算法 … 在签名的时候使用它要用到一个私钥 … 就是一个 Private Key … 在验证的时候需要用到公钥 … 就是 Public Key ..

使用这种算法,你可以在一个单独的地方,用私钥签发 JWT … 在其它的地方,可以使用公钥去验证我们签发的 JWT … 也就是有私钥的地方才能签发 JWT .. 没有私钥,但是有公钥的地方只能去验证 jwt,不能签发 jwt ..

现在我们可以使用 openssl 去生成一个私钥,再根据这个私钥去生成一个公钥 … 打开命令行工具 … Windows 上可以使用 cmder ,你可以新建一个 cmd 类型的界面,或者 bash 类型的界面 … mac 用户可以用系统自带的终端 …

先去生成一个私钥 .. 进入到想要保存私钥文件的地方 … 创建一个目录,名字是 config,再进入到 config 目录的下面 .. 然后执行一下 ..

ssh-keygen -t rsa -b 2048 -f private.key

再根据这个私钥生成一个公钥 ..

openssl rsa -in private.key -pubout -outform PEM -out public.key

查看一下 .. 这里这个 private.key.pub 文件没什么用,可以把它删除掉 …

现在我们这里两个文件 … private.key ,私钥,还有一个 public.key,公钥 .. 我们先根据这个私钥去签发一个 jwt ..

打开 index.js … 先添加一段注释 … 说明一下默认用的是 HS256 这种算法 … 然后把签发还有验证 jwt 的代码注释掉 ..

再添加一段注释 … 下面用一下 RS256 这种算法 … 我们可以把私钥文件里的内容读取过来 … 需要用到 Node.js 的 fs 模块 … 先在文件的顶部导入这个模块 .. 名字是 fs …

添加一个 privateKey ,表示私钥 … 用一下 fs 的 readFileSync 方法,它是读取文件里内容的同步方法 .. 文件的位置是 ./config/private.key

再签发一个 token … 用一下 jwt 的 sign 方法, token 的数据是 payload .. 这个签名算法要用一下 privateKey,就是之前我们生成的私钥文件里的内容 ..

然后是个对象 … 里面添加一个 algorithm … 用这个选项指定一下签名用的算法,默认它的值是 HS256 ,这里我们要设置成 RS256 ..

最后在控制台上输出签发的这个 token 里的内容 …

回到命令行, 回到上一级目录 .. 执行一下 node index.js

… 会得到签发的这个 token … 复制一下 …

再打开 jwt 的调试工具 … 把 token 内容先粘贴上去 .. 右边会显示解码之后的内容 … 注意这个 token 的 header 里面,有个 alg ,它的值是 RS256,它表示的是这个 token 用的算法 ..

上面的算法选择 RS256 … 然后再打开 public key ,就是公钥这个文件,复制一下里面的内容 … 粘贴到调试工具里面 ..

这样就会提示 Signature Verified ,签名验证成功 …

文档更新时间: 2019-07-09 10:59   作者:月影鹏鹏