V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
gaozihang
V2EX  ›  分享创造

为了提高性能,用 PHP 扩展实现了一个 JWT (JSON Web Token)

  •  1
     
  •   gaozihang · 2018-05-24 09:54:20 +08:00 · 6362 次点击
    这是一个创建于 2135 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前 PHP 所有的 JWT 库都是用 PHP 语言编写的,为了提高性能,我基于 openssl 库,用 PHP 扩展实现了一个 JWT

    GitHub: https://github.com/cdoco/php-jwt

    例子

    $key = "example-hmac-key";
    $claims = array(
        "data" => [
            "name" => "ZiHang Gao",
            "admin" => true
        ],
        "iss" => "http://example.org",
        "sub" => "1234567890",
    );
    
    // default HS256 algorithm
    $token = jwt_encode($claims, $key);
    
    echo $token . PHP_EOL;
    //eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.
    //eyJpc3MiOiJodHRwOlwvXC9leGFtcGxlLm9yZyIsInN1YiI6IjEyMzQ1Njc4OTAiLCJuYW1lIjoiWmlIYW5nIEdhbyIsImFkbWluIjp0cnVlfQ.
    //2lFeBTsRegsjXiBCZNkW41KFlsZPSFu7KTsyAM9lUiQ
    
    print_r(jwt_decode($token, $key));
    /**
    Array
    (
        [data] => Array
            (
                [name] => ZiHang Gao
                [admin] => 1
            )
    
        [iss] => http://example.org
        [sub] => 1234567890
    )
    */
    
    13 条回复    2018-05-25 16:15:20 +08:00
    oott123
        1
    oott123  
       2018-05-24 10:14:49 +08:00
    怎么也得搞个 benchmark 让大家看看你的有多快啊,不然怎么吸引用户 233
    qloog
        2
    qloog  
       2018-05-24 10:39:01 +08:00
    能写出来就至少给个 666
    predator
        3
    predator  
       2018-05-24 10:48:14 +08:00
    赞一个,7+的暂时只能在测试环境体验下先
    gaozihang
        4
    gaozihang  
    OP
       2018-05-24 11:54:30 +08:00
    @oott123 我自己跑的 benchmark,是 PHP 的 5-6 倍,后续会把 benchmark 贴出来 ~
    wensonsmith
        5
    wensonsmith  
       2018-05-24 13:21:30 +08:00
    战略 Mark, 666
    yongjing
        6
    yongjing  
       2018-05-24 14:06:44 +08:00
    66666
    m939594960
        7
    m939594960  
       2018-05-24 14:17:31 +08:00
    好东西啊
    swordne
        8
    swordne  
       2018-05-24 17:19:07 +08:00
    star 一下。
    LeungJZ
        9
    LeungJZ  
       2018-05-24 19:22:54 +08:00 via iPhone
    战略性马克。
    习惯性 666。
    vibbow
        10
    vibbow  
       2018-05-24 19:25:50 +08:00
    其实并没有太大作用,单个请求周期里,JWT 运算占用的总运算时间非常之少,哪怕性能提升 1w 倍对整个请求的响应时间也不会有什么显著改进的。

    而且还会导致跨版本升级的时候还需要等你这个扩展支持新版本...

    目前耗时大头应该都是数据库操作...
    notreami
        11
    notreami  
       2018-05-24 22:47:05 +08:00
    还不如加个缓存
    changwei
        12
    changwei  
       2018-05-25 13:32:58 +08:00 via Android
    jwt 的加解密操作主要都是用 php 扩展提供的加解密和序列化函数操作的,php 扩展函数本身就是 c 写的,理论来说纯扩展和 php 库的速度差别应该不大啊。
    pushy
        13
    pushy  
       2018-05-25 16:15:20 +08:00
    你的业务性能消耗在 JWT 上?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5425 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 08:41 · PVG 16:41 · LAX 01:41 · JFK 04:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.