欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Vue+Node.js+Mongodb 实现身份验证(token的使用和说明)

程序员文章站 2022-07-03 11:03:15
...

一、首先了解一哈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值存储到数据库的用户表即可   Vue+Node.js+Mongodb 实现身份验证(token的使用和说明)

Vue+Node.js+Mongodb 实现身份验证(token的使用和说明)

Vue+Node.js+Mongodb 实现身份验证(token的使用和说明)

Vue+Node.js+Mongodb 实现身份验证(token的使用和说明)

 

2.3、【验证token的函数】除登录接口,其他接口路由,都可添加此校验token的`verifyToken`函数

Vue+Node.js+Mongodb 实现身份验证(token的使用和说明)


Vue+Node.js+Mongodb 实现身份验证(token的使用和说明)

 


三、那前端是如何将token值携带到请求头的呢

3.1、前端在登录之后,将获取的token值存储在本地localstorge中,此处用的Vuex存储,字段名也是'token'。然后在axios请求拦截器中,在请求头的'Authorization'字段中添加token值   Vue+Node.js+Mongodb 实现身份验证(token的使用和说明)

Vue+Node.js+Mongodb 实现身份验证(token的使用和说明)

Vue+Node.js+Mongodb 实现身份验证(token的使用和说明)

 

3.2、token成功添加到请求头啦,在浏览器的控制台可以查看到

Vue+Node.js+Mongodb 实现身份验证(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、写给自己的随笔,有问题欢迎指出¯\_(ツ)_/¯