Vue+Node.js+Mongodb 实现身份验证(token的使用和说明)
一、首先了解一哈token的作用
1.1、token是什么,为什么需要,怎样使用,参考这里哈
是什么: token是交互会话中唯一身份标识符的令牌,即当前用户的唯一标识,并且可以设置有效时间
为什么使用: 此项目用来作身份验证,保证用户是合法请求服务端数据。
怎样使用:token值在用户第一次登录时生成,服务端将此token值存储到数据库中。接着客户端在接下来的请求,都会携带唯一token值,服务端根据对应接口携带的token值,与数据库中的token值进行对比。
二、下面看看,token如何在Node.js怎么使用的吧
2.1、首先安装`jsonwebtoken`,参考官网定义
npm install jsonwebtoken --save-dev
什么是JSON Web Token:
json web token(jwt)是一个开放标准(rfc 7519),它定义了一种紧凑的、自包含的方式,用于作为json对象在各方之间安全地传输信息。
此信息可以验证和信任,因为它是数字签名的。jwts可以使用**(使用hmac算法)或使用rsa或ecdsa的公钥/私钥对进行签名。
尽管jwts可以被加密以在各方之间提供保密性,但我们将重点关注签名令牌。签名的令牌可以验证其中包含的声明的完整性,而加密的令牌则对其他方隐藏这些声明。当令牌使用公钥/私钥对签名时,签名还证明只有持有私钥的一方才是签名方。
为什么使用:
因为需要确保用户认证过,并且保证用户的唯一性。
怎样使用:
通常用于跨域token认证,结合RSA非对称加密算法(生成RSA秘钥参考此处哈),返回唯一token值。
JSON Web Token的原理:(参考这里哈)
JWT实际是很长的字符串,中间用点(
.
)分隔成三个部分。JWT 的三个部分依次如下:
- Header(头部):是一个 JSON 对象(需要加密的数据,如此处传递的用户的信息等)
- Payload(负载):也是一个 JSON 对象,用来存放实际需要传递的数据(有7个官方字段,如此处使用了'exp'过期时间字段)
- Signature(签名):首先需要指定一个**,通过秘钥算出签名(如此处使用的RSA的私钥加密,返回的签名,当然之后就对应公钥解密啦)
2.2、【生成token的函数】前提已经准备好RSA秘钥哈,此次通过私钥加密、公钥解密的方式,用到工具OpenSSL(生成方式参考此处的RSA非对称加密算法),在用户登录接口中,使用生成token的`generateToken`函数,然后将生成的token值存储到数据库的用户表即可
2.3、【验证token的函数】除登录接口,其他接口路由,都可添加此校验token的`verifyToken`函数
三、那前端是如何将token值携带到请求头的呢
3.1、前端在登录之后,将获取的token值存储在本地localstorge中,此处用的Vuex存储,字段名也是'token'。然后在axios请求拦截器中,在请求头的'Authorization'字段中添加token值
3.2、token成功添加到请求头啦,在浏览器的控制台可以查看到
总结:
1、需要先了解token在当前的用处,如此处是为了身份验证
2、Node.js需要结合jsonwebtoken中间件、RSA秘钥,生成一个jtw即token值,其中可以添加iss签发人、exp过期时间、sub主题等官方字段,也可以添加自定义字段
3、服务端在客户端请求登录时,生成token值,并存储到数据库中,所以除登录接口以为的接口,都可以添加校验token值的函数(主要包含:判断是否有效token、当前token是否过期、是否退出接口等)
4、客户端在登录成功后,将token值存储在本地(如localStorage中),然后结合请求方法(如axios),请求方法的请求拦截器中,将token值添加到请求头的某个字段中(如Authorization字段)
5、写给自己的随笔,有问题欢迎指出¯\_(ツ)_/¯
下一篇: 3DMAX怎么渲染一个彩色的背景?