token的使用流程

本文深入解析了Token的概念及其在用户认证中的应用,包括Token的组成、使用场景及流程,如无状态请求、保持登录状态和第三方登录。同时,详细介绍了如何使用OpenSSL生成私钥和公钥,以及利用jsonwebtoken进行Token的生成。
摘要由CSDN通过智能技术生成

token

token的概念

  1. token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。
    当用户第一次登录后,服务器生成一个token并将此token返回给客户端,以后客户端只需带上这个token前来请求数据即可,无需再次带上用户名和密码。

  2. 简单token的组成;uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token的前几位以哈希算法压缩成的一定长度的十六进制字符串。为防止token泄露)。

token的使用场景

  1. 无状态请求

  2. 保持用户的登录状态

  3. 第三方登录(token+auth2.0)

token使用流程

  1. 安装openssl( https://blog.csdn.net/sunhuansheng/article/details/82218678 )
    - 先安装perl
        + 重启电脑
        + 进入 C:\Perl64\eg
        + 以管理员身份运行 perl --help
            - 报错( perl没有配置环境变量 )
        - 安装openssl
            + 软件安装无要求,一路next
            + 重启电脑
            + 然后在命令终端输入openssl,发现报错openssl命令未找到
                + 配置全局的环境变量
            + 在命令终端继续输入openssl,然后报警告:WARNING: can't open config file: /usr/local/ssl/openssl.cnf
                + 在你得opensll安装路径下找到openssl.cfg,我的路径是 C:\OpenSSL-Win64\bin\openssl.cfg,设置环境变量
                  `$ set OPENSSL_CONF=C:\OpenSSL-Win64\bin\openssl.cfg `
            + 继续输入openssl
            `$ openssl`
            `$ OpenSSL>`
    - 注意: perl与openssl的下载方法另行百度
  1. 先使用express创建项目

  2. 打造了一个login的post接口

  3. 使用openssl生成一个私钥

    • 进入某一个项目文件夹中生成
      $ openssl genrsa -out ./private_key.pem 1024
  4. 使用openssl生成公钥
    $ openssl rsa -in ./private_key.pem -pubout -out ./public_key.pem

  5. 安装jsonwebtoken
    $ cnpm i jsonwebtoken -D

  6. 通过私钥生成token

    let private_key=fs.readFileSync(path.join(__dirname,'./private_key.pem'))
    var token = jwt.sign(palyload, private_key,{ algorithm: 'RS256'});
  1. 前端发送ajax时要发送一个token
    submit.onclick = function () {
        $.ajax({
            url: 'http://localhost:3000/login',
            data: {
                username: username.value,
                password: password.value,
                token: localStorage.getItem('token') //用封装的获取cookie的方法来取
            },
            method: 'POST',
            success ( res ) {
                console.log( res )
                const result = JSON.parse( res )
                localStorage.setItem('token',result.auth)
            }
        })
    }
  1. 后端接收前端发来的token,做登录判断

  2. 前端存储token

  3. 或后端存储token

    // 我们使用express-session来存储
    // 1. 在app.js中设置express-session
    app.use(session({
        secret: 'keyboard cat',
        resave: false,
        saveUninitialized: true,
        cookie: { secure: true }
    }))
    
    // 2. 在你的接口中 做 req.session的值设置
    const { username,password,token } = req.body
    if( !token ){
            //当前条件成立,证明用户是第一次登录( 一个cookie周期 )
            req.session.token = jwt_token 
            //jwt_token是我们通过使用jsonwebtoken + openssl定义的私钥 来生成的
        }else{
        //当前条件不成立,证明用户已经不是第一次登录( 一个cookie周期 )
        //如果cookie时间周期到了,那么我们将token清除掉
        var timeTap = Date.now() //当前时间戳
        var fuTimeTap = (new Data( req.session.cookie._expires )).getTime()
        if( fuTimeTap - timeTap === req.session.cookie.originalMaxAge ){
            req.session.token = ''
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值