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

  • 相关阅读:
    2.2编译模块实现内核数据操控小结
    期末总结20135320赵瀚青LINUX内核分析与设计期末总结
    20135320赵瀚青LINUX期中总结
    20135320赵瀚青LINUX第八周学习笔记
    20135320赵瀚青LINUX第四章读书笔记
    20135320赵瀚青LINUX第七周学习笔记
    20135320赵瀚青《深入理解计算机系统》第七章读书笔记
    让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法
    VMware虚拟机,vps忘记密码修改密码
    项彪与许知远谈论的问题---清醒的活着
  • 原文地址:https://www.cnblogs.com/spmt/p/10622251.html
Copyright © 2011-2022 走看看