• PHP——JWT与Token区别


    TOKEN

    概念: 令牌,就是加密的字符串, 是访问资源的凭证。Token需要查库验证token 是否有效。

    1. 客户端使用用户名跟密码请求登录。
    2. 服务端收到请求,去验证用户名与密码。
    3. 验证成功,服务端会签发一个Token保存到(Session,redis,mysql…)中,然后再把这个 Token 发送给客户端。
    4. 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里。
    5. 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token。
    6. 服务端收到请求,验证密客户端请求里面带着的Token和服务器中保存的Token进行对比效验, 如果验证成功,就向客户端返回请求的数据。

    JWT

    JWT是json web token缩写。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。

    JWT不用查库,直接在服务端进行校验,因为用户的信息及加密信息,和过期时间,都在JWT里,只要在服务端进行校验就行,并且校验也是JWT自己实现的。

    JWT包含三个部分: Header头部,Payload负载和Signature签名。由三部分生成JwtToken,三部分之间用“.”号做分割。 校验也是JWT内部自己实现的 ,并且可以将你存储时候的信息从JwtToken中取出来无须查库。

    1. 客户端使用用户名跟密码请求登录。
    2. 服务端收到请求,去验证用户名与密码。
    3. 验证成功,服务端会签发一个JwtToken,无须存储到服务器,直接再把这个JwtToken发送给客户端。
    4. 客户端收到JwtToken以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里。
    5. 客户端每次向服务端请求资源的时候需要带着服务端签发的JwtToken。
    6. 服务端收到请求,验证密客户端请求里面带着的 JwtToken, 如果验证成功,就向客户端返回请求的数据。

    安装

    composer require firebase/php-jwt
    

    使用

    加密

    $key = 'example_key';
    $payload = [
        'iss' => 'http://example.org',
        'aud' => 'http://example.com',
        'iat' => 1356999524,
        'nbf' => 1357000000,
        'jti' => [
            'id' => 1,
            'type' => 'test'
        ]
    ];
    
    /**
     * IMPORTANT:
     * You must specify supported algorithms for your application. See
     * https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40
     * for a list of spec-compliant algorithms.
     */
    $jwt = JWT::encode($payload, $key, 'HS256');
    
    

    解析

    $decoded = JWT::decode($jwt, new Key($key, 'HS256'));
    
    print_r($decoded);
    
    /*
     NOTE: This will now be an object instead of an associative array. To get
     an associative array, you will need to cast it as such:
    */
    
    $decoded_array = (array) $decoded;
    
    /**
     * You can add a leeway to account for when there is a clock skew times between
     * the signing and verifying servers. It is recommended that this leeway should
     * not be bigger than a few minutes.
     *
     * Source: http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#nbfDef
     */
    JWT::$leeway = 60; // $leeway in seconds
    $decoded = JWT::decode($jwt, new Key($key, 'HS256'));
    print_r($decoded);
    
  • 相关阅读:
    C# 图像处理:记录图像处理时间的一个类
    C# 图像处理:将图像(24位真彩)转为 8位灰度图像 采用了内存法,大大提高了效率
    C# 图像处理:复制屏幕到内存中,拷屏操作
    C# 图像处理:Bitmap 与 Image 之间的转换
    C# 图像处理:获取鼠标位置信息(全局)
    C# Liseview的使用方法之一:滚动到选中的行
    C# windows服务:如何获取服务程序所在的文件夹
    C#自制Web 服务器开发:mysql免安装版配置步骤详解分享
    C#自制Web 服务器开发:用C#开发自己的Web服务器
    ROS:ROS操作类MK.cs
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/16205646.html
Copyright © 2020-2023  润新知