• 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);
    
  • 相关阅读:
    大规模web服务读书笔记 狼
    MVC3如果虚拟目录中有点号,会导致静态文件404 狼
    CDN服务商和CDN常见问题 狼
    中文字段名,问题根源查询无聊话题。 狼
    NET下Session共享的几种实现方式 狼
    企业应用架构读书笔记与总结 狼
    Redis简单本机测试 狼
    你是否经历过这些,求如何继续才能提升 狼
    WinDbg配置和使用基础
    Python IDLE入门
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/16205646.html
Copyright © 2020-2023  润新知