PHP无状态对象,(PHP)基于Token的身份验证中对无状态的理解
假设我们设计的Token储存的信息为:
用户名.发行时间.过期时间.签名
在用户登录成功后,我们获取到用户的用户名、此时的时间戳,并将它们和我们设置的过期时间拼接在一起,组成一个字符串,假设为:
$info = 'foo.1497279169.1497379180';
然后我们根据以上信息信息生成签名(这里我们假设密钥为‘mystar’):
$signature = hash_hmac('md5',$info,'mystar');
最后我们将这两部分拼接起来,得到最终的Token字符串:
$token = $info.'.'.$signature;
此时得到的字符串为:
foo.1497279169.1497379180.8fd81e6e607d9228a6ef61e83b65e940
当用户登陆成功时,我们将此字符串储存到cookie中,那么在用户登录后,每次向服务器发送请求都会带着这个Token字符串,服务器在拿到字符串后,利用explode()函数将字符串的前三部分(即信息部分)取出,使用同样的方法拼接成一个字符串,并用hash_hmac()函数,再次对其进行加密,用加密后的字符串和签名部分做比较,如果相等,那么证明这个cookie没有被修改过,那么就成功验证了用户的合法身份。
$arr = explode('.',$_COOKIE['token']);
$info = $arr[0].'.'.$arr[1].'.'.$arr[2];
$true_signature = hash_hmac('md5',$info,'mystar');
if ($true_signature == $arr[3]){
//验证成功
}
else{
//验证失败,数据被非法修改
}
在整个验证的过程中,不需要在session或是数据库中储存任何的信息,Token本身携带了足够的信息,只需要在客户端的cookie或本地介质存储状态信息,然后用服务端的代码进行验证即可,所以说是基于Token的身份验证是无状态的。
最后,这只是最简单的思路,实际应用中$info中可以储存更多的信息,且一般需要用Base64进行编码后再进行拼接和加密(JWT)。
PHP无状态对象,(PHP)基于Token的身份验证中对无状态的理解相关推荐
- 基于Token进行身份验证
1.基于服务器的验证 我们都是知道HTTP协议是无状态的,这种无状态意味着程序需要验证每一次请求,从而辨别客户端的身份. 在这之前,程序都是通过在服务端存储的登录信息来辨别请求的.这种方式一般都是通 ...
- 【转】基于Token的身份验证原理
目录 1 发展史 2 Cookie 3 Session 3.1 cookie和session的区别 4 Token 4.1 传统方式--基于服务器的验证 4.2 基于服务器验证方式暴露的一些问题 4. ...
- node实现基于token的身份验证
最近研究了下基于token的身份验证,并将这种机制整合在个人项目中.现在很多网站的认证方式都从传统的seesion+cookie转向token校验.对比传统的校验方式,token确实有更好的扩展性与安 ...
- 基于Token的身份验证的原理
目录 1 发展史 2 Cookie 3 Session 3.1 cookie和session的区别 4 Token 4.1 传统方式--基于服务器的验证 4.2 基于服务器验证方式暴露的一些问题 4. ...
- 基于 Token 的身份验证:JSON Web Token
最近了解下基于 Token 的身份验证,跟大伙分享下.很多大型网站也都在用,比如 Facebook,Twitter,Google+,Github 等等, 比起传统的身份验证方法,Token 扩展性更强 ...
- 用户数据表设计借鉴 浅谈数据库用户表结构设计,第三方登录 基于 Token 的身份验证
最近对用户数据表的设计比较感兴趣,看到了两篇比较好的文章. 浅谈数据库用户表结构设计,第三方登录 转载于: https://www.cnblogs.com/jiqing9006/p/5937733.h ...
- 基于 Token 的身份验证方法
基于 Token 的身份验证方法 使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录.大概的流程是这样的:客户端使用用户名跟密码请求登录 服务端收到请求,去验证用户名与密码 验证成 ...
- 基于Token的身份验证——JWT
原文:基于Token的身份验证--JWT 初次了解JWT,很基础,高手勿喷. 基于Token的身份验证用来替代传统的cookie+session身份验证方法中的session. JWT是啥? JWT就 ...
- 基于 Token 的身份验证和安全问题
1 前言 最近为了学习 Token 知识,博主在网上狂搜资料,其中发现了两篇博文对 Token 的讲解特别详细的,博主看过之后感觉受益匪浅,现将两篇博文整合成一篇博文发布出来,从而分享给大家,希望能够 ...
最新文章
- java中如何改方法签名_我们可以在Java重写中更改方法签名吗?
- 介绍27款经典的CSS框架
- HttpWatch是强大的网页数据分析工具
- rapidjson读取json文件_SPARK入门 - json文件读取
- Python functool module
- Java 算法 邮票
- PHP新闻APP,【优速软件】APP/小程序接口:全部新闻列表,POSCMS,CodeIgniter技术文档,PHP开发文档,迅睿CMS框架官方教程...
- 【elasticsearch】org.elasticsearch.cluster.block.ClusterBlockException: blocked by: [SERVICE_UNAVAILA
- RFID Cooking with Mifare Classic
- 调用iframe 中的js[兼容各种浏览器]
- 渗透测试/应急演练过程中metasploit制作木马连接失败问题排查
- Android 开源无线投屏,用树莓派Raspberry Pi 4B制作一个无线投屏器(20200803)
- R语言——双因素方差分析
- Unity Activator反射
- DICOM标准之一_介绍和概述
- vue纯前端下载excel表格
- C#解决串口数据丢失问题
- 如何批量实现通过MP3标题重命名文件名
- 华为v5服务器安装2012系统,裸金属服务器安装v5
- 【winPE系统下如何安装游戏手柄】