zoukankan      html  css  js  c++  java
  • Token令牌管理权限

    什么是token

    HTTP是一种无状态的协议,也就是HTTP没法保存客户端的信息,没办法区分每次请求的不同。

    Token是服务器生成的一串字符,作为客户端请求的令牌。当第一次登陆后,服务器会分发Tonken字符串给客户端。后续的请求,客户端只需带上这个Token,服务器即可知道是该用户的访问。

    使用Tonken,可以实现:权限管理、身份验证、防止同一账号异地登录。

    Token的验证过程

    1.客户端:用户名和密码请求登录

    2.服务器:收到请求,验证用户名和密码,验证成功后,分发一个Token返回给客户端

    3.客户端:将Token存储,例如放在 Cookie 里或者 Local Storage 里,后续每次请求,带上此Token

    4.服务器:收到请求,验证Token是否正确,验证成功返回请求数据

    基于PHP实现token令牌管理权限

    1.生成方法

    • 头部:加密类型

    • 说明:消息内容

    • key:一个随机码用来加密

    上面三部分使用.连接起来,然后使用hs256进行加密,生成tokent

    2.详细生成方法

    • 头部通常由两部分组成:令牌的类型(即JWT)和所使用的加密算法(如:SHA256或者RSA)
    {
          "alg": "HS256",
          "typ": "JWT"
    }
    

    然后,这个json被Base64Url编码,成为第一部分

    • 有效载荷是声明。声明是关于实体的部分。
    {
          "exp": "1525785339",
          "sub": "1234567890",
          "name": "John Doe",
          "admin": true
    }
    

    然后将有效载荷Base64Url进行编码,成为第二部分
    (PS:此信息尽管受到篡改保护,但是任何人都可以阅读。除非加密,否则不要将重要信息放在里面)

    • 使用一个加密key

    • 签名,需要使用编码后的第一部分,编码后的第二部分,然后一个关键的key。采用第一部分里的加密算法进行签名

    HMACSHA256(
              base64UrlEncode(header) + "." + base64UrlEncode(payload),
              key
    )
    

    该签名用于验证消息是否有篡改。
    (PHP使用crypt方法进行加密。注意:SHA-256用于防篡改,AES-256用于加密两个概念不一样)

    1. token存放位置
      通常应该在请求的header头中的 Authorization字段使用 Bearer模式添加JWT(Authorization: Bearer ) (当然你也可以放在任意位置,如URL后面当成一个参数传递,只要客户端能识别就行,不过既然JWT是个规范,那么我们最好还是按照规范来)

    4.使用方式

    • 客户端用户输入用户名密码后执行登录,请求token
    • 服务器收到请求后,使用JWT这种规范,进行生成token,返回给客户端
    • 客户端收到token以后,解密后,验证token的时效性(token的过期时间),保存起来
    • 客户端拿token请求数据
    • 服务器收到token解密后,验证用户身份,验证时效性,然后验证用户

    5.缺点

    • 无法作废已颁布的令牌(对token刷新使用期限)
    • 不易应对过期数据(支持 token 失效)
    • 所以如果你使用了 token ,那么如果 token 被捕获到,那么就可以进行伪造进行冒充。所以如果安全比较高的话,还是建议使用oauth2

    参考;http://ukagaka.github.io/php/2018/05/08/JWT.html

  • 相关阅读:
    poj 2411 Mondriaan's Dream 骨牌铺放 状压dp
    zoj 3471 Most Powerful (有向图)最大生成树 状压dp
    poj 2280 Islands and Bridges 哈密尔顿路 状压dp
    hdu 3001 Travelling 经过所有点(最多两次)的最短路径 三进制状压dp
    poj 3311 Hie with the Pie 经过所有点(可重)的最短路径 floyd + 状压dp
    poj 1185 炮兵阵地 状压dp
    poj 3254 Corn Fields 状压dp入门
    loj 6278 6279 数列分块入门 2 3
    VIM记事——大小写转换
    DKIM支持样本上传做检测的网站
  • 原文地址:https://www.cnblogs.com/spmt/p/10622251.html
Copyright © 2011-2022 走看看