简单讲解与nodejs简单实现"/>
JWT身份验证原理简单讲解与nodejs简单实现
目录
- 前言
- JWT简单介绍
- node中使用JWT
- 安装jsonwebtoken包
- 签发token
- 验证token
前言
上一篇【基于token的持久化登录讲解及其实现】讲到token的机制,以及token的2大特性,即:只有服务器能够签发token,服务器可以验证token是否由自己签发。
可是上一篇博客编写的时候,对token的理解还不够深入,上一篇博客的token是最最最基本的token验证,而现在互联网应用的登录验证普遍使用JWT,即 JSON WEB TOKEN 的规范化验证,所以今天来学习一蛤,并且学习如何在node上编写token的签发与验证程序。
JWT简单介绍
JWT,即 JSON WEB TOKEN ,是一种规范化的无状态登录验证方式。因为以JSON的形式表示,所以JWT天然的不受编程语言的限制。
jwt中,token是一串字符串,由.
号分割为三个部分,下面给出一条完整的token
完整:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoid29ybGRIZWxsbyIsImlkIjoxMTQ1MTQsImlhdCI6MTU5NzM5Nzk0MSwiZXhwIjoxNTk3NjU3MTQxfQ.otN7LikyB1mmknnBXL0mVrdOSFmID-dCORD5x4R3voM第一部分:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9第二部分
eyJuYW1lIjoid29ybGRIZWxsbyIsImlkIjoxMTQ1MTQsImlhdCI6MTU5NzM5Nzk0MSwiZXhwIjoxNTk3NjU3MTQxfQ第三部分
otN7LikyB1mmknnBXL0mVrdOSFmID-dCORD5x4R3voM
token的第一和第二部分,都是base64编码的,这意味着他们是明文的,可以被解码的,下面给出各个部分的解码结果
第一部分:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
解码结果:
{"alg":"HS256","typ":"JWT"}第二部分:
eyJuYW1lIjoid29ybGRIZWxsbyIsImlkIjoxMTQ1MTQsImlhdCI6MTU5NzM5Nzk0MSwiZXhwIjoxNTk3NjU3MTQxfQ
解码结果:
{"name":"worldHello","id":114514,"iat":1597397941,"exp":1597657141}
看到json格式的数据,想必都懂了,为啥叫json web token。
其中,第一部分声明了使用的算法,和token的类型,即为SHA256加密算法的JWT。
第二部分则是一些服务要用到的用户信息,这部分是服务器自定义添加的,比如用户登录的用户名和昵称,用户的余额等。在上诉例子中,我们添加name
和id
字段。值得注意的时,iat和exp字段表示签发时间和过期时间,token验证用。
第三部分是前两部分base64编码串,加上一个密钥,使用SHA256算法加密的结果(使用的算法在第一部分声明,即HS256)。值得注意的是,这个密钥只有服务器有,所以保证token都是服务器签发的。
具体的加密方式如下:
- 获取前两部分的base64加密字符串 s,即:(注意
.
号分割)
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoid29ybGRIZWxsbyIsImlkIjoxMTQ1MTQsImlhdCI6MTU5NzM5Nzk0MSwiZXhwIjoxNTk3NjU3MTQxfQ
- 将 s 串和一个密钥一起,利用HS256算法加密,形成第三部分。
因为整合了前两部分信息,服务器验证token时,利用前两部分+密钥,再次产生第三部分,然后和用户提交的第三部分比对,从而验证。
node中使用JWT
在node.js中使用JWT,我们直接用别人造好的轮子就好了,不必自己重复造轮子了。。
安装jsonwebtoken包
使用node的包管理工具npm可以快速安装
npm install jsonw
更多推荐
JWT身份验证原理简单讲解与nodejs简单实现
发布评论