美文网首页
express框架的token方案

express框架的token方案

作者: 俊滔_b059 | 来源:发表于2018-04-02 16:58 被阅读84次

    参考: 【翻译】在Nodejs中使用JSON WEB Tokens

    JWT原理

    一个JWT被周期(period)分寸了三个部分。JWT是URL-safe的,意味着可以用来查询字符参数。

    • 第一部分

      JWT的第一部分是一个js对象,表面JWT的加密方法。实例使用了HMAC SHA-266
    {
      "typ" : "JWT",
      "alg" : "HS256"
    }
    

    在加密之后,这个对象变成了一个字符串:

    eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9
    
    • 第二部分

    JWT的第二部分是token的核心,他也是一个JS兑现,包含了一些信息。有一些是必须的,有一些是选择性的。一个实例如下:

    {
      "iss": "joe",
      "exp": 1300819380,
      "http://example.com/is_root": true
    }
    

    这被称为JWT Claims Set。因为这篇文章的目的,我们将忽视第三个参数。但是你可以阅读这篇文章.这个ississuer的简写,表明请求的实体。通常意味着请求API的用户。expexpires的简写,是用来限制token的生命周期。一旦加密,JSON token就像这样:

    eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ
    
    • 第三部分
      第三个也是最后一个部分,是JWT根据第一部分和第二部分的签名(Signature)。像这个样子:
    dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
    

    使用

    用户登录成功后, 服务端发送一个token给客户端

    const db = require('../mysql');
    const express = require('express');
    const app = express();
    const jwt = require('jwt-simple');
    const moment = require('moment')
    
    //...业务代码省略
    if(登录成功){
    
      let expires = moment().add(1,'days').valueOf();  //设置过期时间
      let token = jwt.encode({
         iss: u_id,
         exp: expires
      }, app.get('jwtTokenSecret'));
    
      //这里我把token存到数据库了,看实际情况而定
      saveToken(rows[0].u_id,token)
    
      return res.json({
           userId: rows[0].u_id,
           token: token,
           state: true,
           info: "登录成功",
      })
    
    }
    

    相关文章

      网友评论

          本文标题:express框架的token方案

          本文链接:https://www.haomeiwen.com/subject/bxexhftx.html