php中关于token验证的相关问题详解

2023-12-08 0 530
目录
  • token验证
    • 首先是为什么用?
    • 那么怎么用呢?
    • token的组成
      • 一般 token 组成:
      • JWT 组成:
      • 标准的组成:
  • 总结

    token验证

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

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

    首先是为什么用?

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

    那么怎么用呢?

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

    token的组成

    一般 token 组成:

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

    JWT 组成:

    JWT(JSON Web Tokens) 读:jot

    标准的组成:

    header(头部),参数主要包括:类型–JWT,签名的算法–HS256。

    private static $header=array(
    \’alg\’=>\’HS256\’, //生成signature的算法
    \’typ\’=>\’JWT\’ //类型
    );

    poyload(负荷):一般是自己想要放置的数据(因为信息会暴露,不建议放敏感信息)。

    php中关于token验证的相关问题详解

    $time = time();
    $tokenInfo = [
    \’iss\’=>\’CIMS\’,
    \’iat\’=>$time,
    \’nbf\’=>$time+2,
    \’jti\’=>md5(uniqid(\’JWT\’).$time),
    \’sub\’=>$data,
    \’exp\’=> $time+7200
    ];

    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

    总结

    扩展

    放请求头:php中关于token验证的相关问题详解

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

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

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

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

    到此这篇关于php中关于token验证的相关问题详解的文章就介绍到这了,更多相关php token验证内容请搜索悠久资源网以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源网!

    您可能感兴趣的文章:

    • thinkphp5框架API token身份验证功能示例
    • php版微信开发Token验证失败或请求URL超时问题的解决方法
    • PHP token验证生成原理实例分析
    • PHP实现微信公众号验证Token的示例代码
    • php token使用与验证示例【测试可用】
    • PHP实现防止表单重复提交功能【基于token验证】
    • 详解php curl带有csrf-token验证模拟提交方法
    • Thinkphp5 微信公众号token验证不成功的原因及解决方法
    • 关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
    • 验证token、回复图文\\文本、推送消息的实用微信类php代码

    收藏 (0) 打赏

    感谢您的支持,我会继续努力的!

    打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
    点赞 (0)

    悠久资源 PHP php中关于token验证的相关问题详解 https://www.u-9.cn/biancheng/php/128396.html

    常见问题

    相关文章

    发表评论
    暂无评论
    官方客服团队

    为您解决烦忧 - 24小时在线 专业服务