zoukankan      html  css  js  c++  java
  • JWT简介json web token bear token

    一个JWT实际上就是一个字符串,它由三部分组成,头部载荷Payload签名
     JWTs can be signed using a secret (with the HMAC algorithm) or a public/private key pair using RSA.
    /*
    |--------------------------------------------------------------------------
    | Required Claims
    |--------------------------------------------------------------------------
    |
    | Specify the required claims that must exist in any token.
    | A TokenInvalidException will be thrown if any of these claims are not
    | present in the payload.
    |
    */
    'required_claims' => [
    'iss',
    'iat',
    'exp',
    'nbf',
    'sub',
    'jti',
    ],
    示例:
    {
    "iss": "http://laravel_api.app/api/register",
    "iat": 1502356728,
    "exp": 1502360328,(相差3600s)
    "nbf": 1502356728,
    "jti": "R0Gd00AvOW259LGo",
    "sub": 11,
    "prv": "3787fba1618a930526aca6c8bb9b44b83f297726"
    }
    这里面的前6个字段都是由JWT的标准所定义的
    • sub: 该JWT所面向的用户
    • iss: 该JWT的签发者
    • iat(issued at): 在什么时候签发的token
    • exp(expires): token什么时候过期
    • nbf(not before):token在此时间之前不能被接收处理
    • jti:JWT ID为web token提供唯一标识
    iss是issuer的简写,表明请求的实体,可以是发出请求的用户的信息。
    There are three types of claims: reservedpublic, and privateclaims.
    像上面的是reserved:
    iss (issuer), exp (expiration time), sub(subject), aud (audience), and others.
    An example of payload could be: { "sub": "1234567890", "name": "John Doe", "admin": true }
    {
    "iss": "John Wu JWT",
    "iat": 1441593502,
    "exp": 1441594722,
    "aud": "www.example.com",
    "sub": "jrocket@example.com",
    "from_user": "B",
    "target_user": "A"
    }
    这里面的前五个字段都是由JWT的标准所定义的。
    aud: 接收该JWT的一方
    将上面的JSON对象进行[base64编码]可以得到下面的字符串。这个字符串我们将它称作JWT的Payload(载荷)。
    1eyJpc3MiOiJKb2huIFd1IEpXVCIsImlhdCI6MTQ0MTU5MzUwMiwiZXhwIjoxNDQxNTk0NzIyLCJhdWQiOiJ3d3cuZXhhbXBsZS5jb20iLCJzdWIiOiJqcm9ja2V0QGV4YW1
    JWT还需要一个头部,头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。这也可以被表示成一个JSON对象。
    1
    2
    3
    4
    {
    "typ": "JWT",
    "alg": "HS256"
    对它也要进行Base64编码,之后的字符串就成了JWT的Header(头部)。
    1eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
    将上面的两个编码后的字符串用句号.连接在一起(头部在前),就形成了
    1eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcm9tX3VzZXIiOiJCIiwidGFyZ2V0X3VzZXIiOiJBIn0
    最后,我们将上面拼接完的字符串用HS256算法进行加密。在加密的时候,我们还需要提供一个密钥(secret)
    得到我们加密后的内容
    1rSWamyAYwuHCo7IFAgd1oRpSP7nzL7BF5t7ItqpKViM
    最后将这一部分签名也拼接在被签名的字符串后面(2个句号),我们就得到了完整的JWT
    1eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcm9tX3VzZXIiOiJCIiwidGFyZ2V0X3VzZXIiOiJBIn0.rSWamyAYwuHCo7IFAgd1oRpSP7nzL7BF5t7ItqpKViM
    多点登录”
    Set-Cookie: jwt=lll.zzz.xxx; HttpOnly; max-age=980000; domain=.taobao.com
    必须使用HttpOnly属性来防止Cookie被JavaScript读取,从而避免跨站脚本攻击(XSS攻击)
    注意domain必须设置为一个点加顶级域名,即.taobao.com。这样,taobao.com和*.taobao.com就都可以接受到这个Cookie,并获取JWT了。
    一般放在HTTP的headers 参数里面的authorization里面,值的前面加Bearer关键字和空格。除此之外,也可以在url和request body中传递。
    Authorization: Bearer {yourtokenhere}
    • OAuth是一个授权的开放网络标准,最终目的是取得token(令牌)
    • Token 令牌,视为用户登录成功,通行的唯一令牌
    • JWT是生成token的轻巧规范,可以结合一起使用
    Unresolvable dependency resolving [Parameter #0 [ $app ]] in class IlluminateCacheCacheManager
    Dependency Bind from
    $app->bind(IlluminateCacheCacheManager::class, function ($app) { return new IlluminateCacheCacheManager($app); });
    Unresolvable dependency resolving [Parameter #0 [ <required> $app ]] in class IlluminateAuthAuthManager
    $app->bind(IlluminateAuthAuthManager::class, function ($app) { return new IlluminateAuthAuthManager($app); });
  • 相关阅读:
    查询AD账号的SID
    Linux下NFS搭建实验
    定制windows环境下cmd替代软件ConEmu
    [转载]硬盘MBR详细介绍
    HP_UX扩dump空间
    zero和null以及sparse
    Cisco MDS9222i光纤交换机最常用排错命令
    Brocade SAN Switch上简单配置AG
    RHEL环境下调试Shell脚本时遇到字符串转换整数的问题
    Brocade SAN SWITCH配置文件导出和恢复
  • 原文地址:https://www.cnblogs.com/elesos/p/7343967.html
Copyright © 2011-2022 走看看