什么是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

Token令牌管理权限的更多相关文章

  1. .NET WebAPI 用ActionFilterAttribute实现token令牌验证与对Action的权限控制

    项目背景是一个社区类的APP(求轻吐...),博主主要负责后台业务及接口.以前没玩过webAPI,但是领导要求必须用这个(具体原因鬼知道),只好硬着头皮上了. 最近刚做完权限这一块,分享出来给大家.欢 ...

  2. WebAPI 用ActionFilterAttribute实现token令牌验证与对Action的权限控制

    .NET WebAPI 用ActionFilterAttribute实现token令牌验证与对Action的权限控制 项目背景是一个社区类的APP(求轻吐...),博主主要负责后台业务及接口.以前没玩 ...

  3. 如何使用Defender优雅的管理权限?

    何为权限管理 权限管理已经不知不觉深入到了我们生活的每一个角落,例如地铁进站的闸机,高速公路上的过路费,停车场的杠杆等等等等. 作为一名开发人员,权限二字对我们的映像更加深刻,无论任何系统,都多多少少 ...

  4. NETCore Bootstrap Admin 通用后台管理权限 [3]: 精简版任务调度模块

    前言 NETCore 里说到任务调度,大家首先想到的应该是大名鼎鼎的 QuartzNET 与 Hangfire,然而本篇介绍的却都不是,而是 Bootstrap Admin(以下简称 BA)通用后台权 ...

  5. 在ASP.NET Web API 2中使用Owin基于Token令牌的身份验证

    基于令牌的身份验证 基于令牌的身份验证主要区别于以前常用的常用的基于cookie的身份验证,基于cookie的身份验证在B/S架构中使用比较多,但是在Web Api中因其特殊性,基于cookie的身份 ...

  6. 接口认证:Bearer Token(Token 令牌)

    因为HTTP协议是开放的,可以任人调用.所以,如果接口不希望被随意调用,就需要做访问权限的控制,认证是好的用户,才允许调用API. 目前主流的访问权限控制/认证模式有以下几种: 1)Bearer To ...

  7. java:struts框架3(自定义拦截器,token令牌,文件上传和下载(单/多))

    1.自定义拦截器: struts.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ...

  8. Security基础(一):Linux基本防护措施、使用sudo分配管理权限、提高SSH服务安全

    一.Linux基本防护措施 目标: 本案例要求练习Linux系统的基本防护措施,完成以下任务: 修改用户zhangsan的账号属性,设置为2015-12-31日失效(禁止登录) 锁定用户lisi的账户 ...

  9. 五、kubernetes节点与令牌管理

    Kubernetes节点与令牌管理 一.令牌管理 查看令牌 [root@master ~]# kubeadm token list 删除令牌 [root@master ~]# kubeadm toke ...

随机推荐

  1. Linux命令1

     1.获取当前系统支持的所有命令的列表: compgen ­-c  2.怎样查看一个linux命令的概要与用法: whatis grep #便可查到grep的用法 3.怎样一页一页地查看一个大文件的内 ...

  2. spring异常Unsatisfied dependency expressed through constructor parameter 0

    异常信息: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with nam ...

  3. 如何查看kernel社区的变更历史

    kernel社区稳定版本的地址为: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ 如果我们想查找某一个文件,比如 ...

  4. 图像压缩编解码实验(DCT编码+量化+熵编码(哈夫曼编码))【MATLAB】

    课程要求 Assignment IV Transform + Quantization + Entropy Coding Input: an intra-frame or a residue pict ...

  5. codeforces444A

    DZY Loves Physics CodeForces - 444A DZY loves Physics, and he enjoys calculating density. Almost eve ...

  6. hdu-5786(补图最短路)

    题意:给你n个点,m条无向边,问你这n个点构成的完全图,不用那m条边,由一个s出现的单源最短路 解题思路:首先,暴力建图不行,点太多,那么我们就按照它的规则来,把m条边建好,但是建的这个图表示不走的方 ...

  7. animation 动画

    语法 animation: name duration timing-function delay iteration-count direction fill-mode play-state ani ...

  8. 05VueCli

    详情请见: https://pizzali.github.io/2018/10/30/VueCli/ Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统,Vue CLI 致力于将 Vue ...

  9. day08读取文件

    可参考;https://www.cnblogs.com/gengcx/p/6713646.html主要内容: 1.只读 2.只写 3.追加 4.r+读写 5.w+写读 6.a+写读 7.其他一.使用p ...

  10. Go-常用库的介绍

    一.Go常用包介绍  fmt.它实现了格式化的输入输出操作,其中的fmt.Printf()和fmt.Println()是开 发者使用最为频繁的函数.  io.它实现了一系列非平台相关的IO相关接口 ...