• 技术文章 >后端开发 >PHP问题

    JWT 是干什么?

    GuanhuiGuanhui2020-06-28 16:23:49原创2410

    JWT是目前流行的跨域认证解决方案,其原理是将用户信息通过加密生成Token,每次请求服务端只需要使用保存的密钥验证Token的正确性,进而不用再保存任何Session数据,使服务端变得无状态。

    jwt验证方式是将用户信息通过加密生成token,每次请求服务端只需要使用保存的密钥验证token的正确性,不用再保存任何session数据了,进而服务端变得无状态,容易实现拓展。

    加密前的用户信息,如:

    {
        "username": "vist",
        "role": "admin",
        "expire": "2018-12-08 20:20:20"
    }

    客户端收到的token:

    7cd357af816b907f2cc9acbe9c3b4625

    JWT 结构

    一个token分为3部分:

    3个部分用“.”分隔,如:

    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

    头部

    JWT的头部分是一个JSON对象,描述元数据,通常是:

    {
      "typ": "JWT",
      "alg": "HS256"
    }

    typ 为声明类型,指定 "JWT"

    alg 为加密的算法,默认是 "HS256"

    载荷

    载荷(payload)是数据的载体,用来存放实际需要传递的数据信息,也是一个JSON对象。

    JWT官方推荐字段:

    也可以使用自定义字段,如:

    {
        "username": "vist",
        "role": "admin"
    }

    签名

    签名部分是对前两部分(头部,载荷)的签名,防止数据篡改。

    按下列步骤生成:

    1、先指定密钥(secret)

    2、把头部(header)和载荷(payload)信息分别base64转换

    3、使用头部(header)指定的算法加密

    最终,签名(signature) = HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload),secret)

    客户端得到的签名:

    header.payload.signature

    也可以对JWT进行再加密。

    推荐教程:《PHP

    以上就是JWT 是干什么?的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:jwt
    上一篇:php和python的区别有哪些 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • php和java的区别有哪些• PHP 危险函数有哪些?• php和python的区别有哪些• PHP7如何连接sql server?• centos7下如何安装PHP7?
    1/1

    PHP中文网