• token


    1、token介绍

    token是服务端生成的一串字符串,作为客户端进行请求的一个认证标识。

    当用户第一次登录后,服务器生成一个token并将此token返回给客户端,以后客户端只需带上这个token前来请求数据即可,无需再次带上用户名和密码。

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

    2、认证(用于请求认证时)----------在postman使用里面有说过认证的东西。

    由于HTTP是一种没有状态的协议,它不知道是谁访问了应用。比如使用用户名、密码登录了,但下次再发送请求时就还需重复操作。

    解决方法:

    当用户请求登录的时候,如果没有问题,在服务端生成一条记录,在这个记录里注明信息,然后把这条记录的id发送给客户端,

    客户端收到以后把这个id存储在cookie里,下次该用户再次向服务端发送请求的时候,可以带上这个cookie,这样服务端会验证一下cookie里的信息,看能不能在服务端这里找到对应的记录,如果可以,说明用户已经通过了身份验证,就把用户请求的数据返回给客户端。

    说到底:就是利用session(sessionid)。在服务端存储为用户生成的session,这些session会存储在内存,磁盘,或者数据库,从而使用session机制

    3、使用token  进行请求认证

    流程:

    1. 客户端使用用户名、密码请求登录。
    2. 服务端收到请求,验证用户名和密码。
    3. 验证成功后,服务端会生成一个token,并发送给客户端。
    4. 客户端收到token后存储起来,放在cookie或者Local Storage(本地存储)里。
    5. 客户端每次向服务端发送请求的时候都需要带上服务端发给的token。
    6. 服务端收到请求,然后去验证客户端请求里面的token,验证成功,就向客户端返回请求的数据。

    其他方式--请求认证:------------------

    1、电脑的mac地址作为token(cmd:ipconfig 可实现查看本机mac物理地址)

    客户端:客户端在登录时获取设备的mac地址,将其作为参数传递到服务端

    服务端:服务端接收到该参数后,便用一个变量来接收,同时将其作为token保存在数据库,并将该token设置到session中。

    客户端每次请求的时候都要统一拦截,将客户端传递的token和服务器端session中的token进行对比,相同则登录成功,不同则拒绝。

    此方式客户端和服务端统一了唯一的标识,并且保证每一个设备拥有唯一的标识。

    缺点:服务器端需要保存mac地址;

    优点:客户端无需重新登录,只要登录一次以后可一直可以使用,超时的问题由服务端进行处理。

    2、用sessionid作为token

    客户端:客户端携带用户名和密码登录

    服务端:接收到用户名和密码后进行校验,正确就将本地获取的sessionid作为token返回给客户端,客户端以后只需带上请求的数据即可。

    此方式的优点是方便,不用存储数据,

    缺点就是当session过期时,客户端必须重新登录才能请求数据。

    4、移动端APP利用token机制进行认证操作

    用户在登录APP时,APP端会发送加密的用户名和密码到服务器,服务器验证用户名和密码,如果验证成功,就会生成相应位数的字符产作为token存储到服务器中,并且将该token返回给APP端。

    以后APP再次请求时,凡是需要验证的地方都要带上该token,然后服务器端验证token,成功返回所需要的结果,失败返回错误信息,让用户重新登录。

    其中,服务器上会给token设置一个有效期,每次APP请求的时候都验证token和有效期。

    5、token的存储

    token可以存到数据库中,但是有可能查询token的时间会过长导致token丢失(当token失效或丢失,再重新认证就行)。

    比如避免查询时间过长,可以将token放到内存中。查询速度和占用的内存都很好。

    6、token的加密-----------------

    加密的方式一般有:

    1. 在存储的时候把token进行对称加密存储,用到的时候再解密。
    2. 签名sign:将请求URL、时间戳、token三者合并,并md5进行加密处理。(及其他加密措施)
  • 相关阅读:
    Django学习路10_创建一个新的数据库,指定列名并修改表名
    设计模式_单例模式的懒汉式实例化
    设计模式_理解单例设计模式
    Django学习路9_流程复习
    Django学习路8_学生表和班级表级联并相互查询信息
    Django学习路7_注册app到能够在页面上显示app网页内容
    es6基础:类、继承、重写
    简单的下拉刷新
    callback&&callback()
    转 五大浏览器四大内核
  • 原文地址:https://www.cnblogs.com/QiKa/p/13252027.html
Copyright © 2020-2023  润新知