首页 > 其他分享 >token验证

token验证

时间:2023-04-14 17:11:55浏览次数:39  
标签:验证 用户 token time 服务器 客户端

token验证

什么是token?我相信很多开发者都或多或少听过基于 token 的用户鉴权和基于 session 的用户鉴权,而今天说的 token 验证就是第一种了。token 的意思是“令牌”,是用户第一次登录服务器返回的,它能让用户不需要提交账户和密码就能进行服务器验证身份,它是被放在请求头中一起提交给服务器的。

为什么用 token 验证?怎么用 token 验证?现在简单介绍一下,有错误请大牛指出,我会立即更正!

首先是为什么用?

  1. 为了验证用户的登录情况,毕竟不是登录状态的话很多东西是不允许访问和呈现出来的。
  2. 减少数据库的频繁查询,增加服务器性能,使得服务器更加健壮。
  3. 它可以在多个服务间共享,完全由应用管理,可以避开浏览器的同源策略
  4. 增加扩展性、安全性和减少服务器内存开销。传统的服务器验证是使用 cookie + session 验证,服务器需要每一次都验证客户端的请求去辨别客户端身份,并且还要创建一个记录将用户信息存储起来,然而随着现在科技发达,这种验证弊端也就显露出来了,例如用户增多从而引发内存资源消耗变大、CORS(跨域资源共享)和 CSRF(跨域请求伪造)等。

那么怎么用呢?

流程:

  1. 客户端的用户输入账户密码请求登录。
  2. 服务端收到请求并进行验证,成功则生成一个 token 值并返回给客户端。
  3. 客户端收到 token 值并将其存储,例如 本地存储:localStore 或 放在Cookie。
  4. 客户端每次请求都将 token 值放在请求头中发给服务器,服务器进行验证有效性。
  5. 成功则返回客户端请求的数据,失败可以让用户进行登录重新获取新的 token 值。

token的组成

一般 token 组成:

  1. Uid(用户身份的唯一标识)
  2. time(时间戳)
  3. sign(签名)

JWT 组成:

JWT(JSON Web Tokens) 读:jot

标准的组成:

  1. header(头部),参数主要包括:类型--JWT,签名的算法--HS256。
private static $header=array(
        'alg'=>'HS256', //生成signature的算法
        'typ'=>'JWT'    //类型
);
  1. poyload(负荷):一般是自己想要放置的数据(因为信息会暴露,不建议放敏感信息)。
    img
$time = time();
$tokenInfo = [
    'iss'=>'CIMS',
    'iat'=>$time,
    'nbf'=>$time+2,
    'jti'=>md5(uniqid('JWT').$time),
    'sub'=>$data,
    'exp'=> $time+7200
];
  1. sign(签名):为了防止被恶意篡改数据。
    /**
    * HMACSHA256签名 https://jwt.io/ 中HMACSHA256签名实现
    * @param string $input 为base64编码后连接而成的的header和poyload的字符串:base64UrlEncode(header).".".base64UrlEncode(tokenInfo)
    * @param string $key
    * @param string $alg 算法方式
    * @return mixed
    */
    private static function signature(string $input, string $key, string $alg = 'HS256')
    {
    $alg_config=array(
    'HS256'=>'sha256'
    );
    return self::base64UrlEncode(hash_hmac($alg_config[$alg], $input, $key,true));
    }
结果:一般会使用 base64 编码,中间用.隔开

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOjEsIm5hbWUiOiJjZXNoaSIsImF1ZCI6IiIsImV4cCI6MTY4MTIyNDY0OCwiaWF0IjoxNjgxMjIxMDQ4LCJpc3MiOiIiLCJqdGkiOiJkN2UxYTBiNGU3MDZmODUxMjgzZWZkZWVlZjQ5MWEwOSIsIm5iZiI6MTY4MTIyMTA0OCwic3ViIjoiIn0.qRTyO1pYHHJxBNRwHUz032NWKKqS3C9dakOHASJyASk

总结

扩展

放请求头:img

JWT 缺点:1.签发生成后无法修改。2.不包含权限控制。

解决token 注销问题:尽快让 token 失效,退出登录后删除 cookie,对失效的 token 形成黑名单,会违无状态特性,但是标记时间短,会减少服务器压力。

解决token 续签问题:后端在用户登录的接口添加 token 有效期判断:例如即将过期那就重新生成一个返回。

token验证目前是非常流行的,不仅仅只是在web网站上,移动端、小程序也会用到。例如小程序用的是使用 login 获取 code 发送给后端进行一系列使用微信官方API接口获取数据再进行加密等操作才返回 token,这里就不详细展开了吧,有兴趣哈哈哈哈自己查下看看啦。

关于 token 更多的问题请在评论区留言!!!

参考文献

https://blog.csdn.net/MINGJU2020/article/details/103039418
https://blog.csdn.net/HD243608836/article/details/115732104
https://zhuanlan.zhihu.com/p/267771576

创作不易,若需转载请备注出处!

标签:验证,用户,token,time,服务器,客户端
From: https://www.cnblogs.com/zxlh1529/p/17284263.html

相关文章

  • 登录获取验证号倒计时操作
    //这里是一整个验证码框,验证码图标加输入框加获取验证码(显示倒计时框)<viewclass="rowbetweend-items-centerb-b"><viewclass="iconfonticon-suo"style="color:#FFFFFF;margin:020upx;"></view><inputtype="number"......
  • Struts_token的令牌机制
       通常在普通的操作当中,我们不需要处理重复提交的,而且有很多方法来防止重复提交。比如在登陆过程中,通过使用redirect,可以让用户登陆之上重定向到后台首页界面,当用户刷新界面时就不会触发重复提交了。或者使用token,隐藏在表单中,当提交时进行token验证,验证失败也不让提交。这......
  • axios实现无感刷新token
    letisRefreshing=false标识当前正在刷新token//重试队列,每一项将是一个待执行的函数形式letrequests=[]axios.interceptors.response.use(response=>{const{code}=response.dataif(code===401){//具体code看和后端定义的是什么,这里是401co......
  • 验证“哥德巴赫猜想”
    数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。输入格式:输入在一行中给出一个(2,2000000000]范围内的偶数N。输出格式:......
  • JSON Web Tokens (JWT) — the only explanation you will ever need
    本文摘抄自ArielWeinberger博客  JSONWebTokens(JWT)—theonlyexplanationyouwilleverneed|byArielWeinberger|Medium JSONWebTokens(JWT)—theonlyexplanationyouwilleverneedJSONWebTokensarechangingtheworldf......
  • 【element-ui】element ui from表单手机号座机号验证
    //手机号验证rules:{ phone:[ {required:true,min:11,max:11,message:"请输入11位手机号码",trigger:"blur"},{pattern:/^1[3456789]\d{9}$/,message:"请输入正确的手机号码"}]}//座机号......
  • 报错信息如下:出现身份验证错误。要求的函数不受支持。可能是由于CredSSP加密数据库修
    微软官方已出补丁包:CVE-2018-0886的CredSSP更新WindowsServer2016,alleditions、WindowsServer2012R2Standard、WindowsServer2012Standard、Windows8.1、Windows10、Windows7这是由于凭据安全支持提供程序协议(CredSSP)是处理加密Oracle修正所导致。(详细......
  • 手撸一个简单的滑块验证码
    使用过很多次滑块验证码的功能,偶然一次想起来,能不能简单的实现一个呢,于是就尝试了一下,然后记录下来了,图个乐子。思路首先是绘制一张图片,自然而然,要用canvas了,就像下面这样,首先加载一张图片,然后去绘制到canvas中。<divid="validate"><canvasid="canvas"></canvas></d......
  • javaweb验证码
    publicclassmyfunction{publicstaticStringgetRandString(intlength){Stringstr="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";Randomrandom=newRandom();StringBuffersb=newStringBuffe......
  • 【验证码逆向专栏】某验深知 V2 业务风控逆向分析
    声明本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作......