zoukankan      html  css  js  c++  java
  • Json Web Token

    JWT符合[RFC 7519]规范,它的优势在于能够取代Session和Cookie验证的方式。属于Token-Based的范畴。

    1. JWT的三段組成解析

    header(头部).payload(载荷).signature(签名)
    

    注:三个部分之间用英文句号.来分隔。

    1.2 header

    {
        "typ": "JWT", #类型,表明是一个JWT字符串
        "alg": "HS256"  #加密算法
    }
    

    编码后:

    ewogICAgInR5cCI6ICJKV1QiLAogICAgImFsZyI6ICJIUzI1NiIKfQ==
    

    一般Header只需要这两个字段即可。

    1.2_payload(关键的自带信息)_

    {
        "user_id":pzdn2009, #用戶Id,
        "name":"pzdn", #名称
        "exp":1556999524 #token過期時間
    }
    

    编码后:

    ewogICAgInVzZXJfaWQiOnB6ZG4yMDA5LCAKICAgICJuYW1lIjoicHpkbiIsIAogICAgImV4cCI6MTU1Njk5OTUyNCAKfQ==
    

    payload用来承载要传递的数据,它的json结构实际上是对JWT要传递的数据的一组声明,这些声明被JWT标准称为claims,它的一个“属性值对”其实就是一个claim,每一个claim的都代表特定的含义和作用。

    1.3_signature_

    计算signature:

    HMACSHA256(base64(header)+"."+base64(payload),secret="mypasswordsdfasdfsddfjjcud")
    

    最终header.payload.signature连成一串,就是JWT。

    1.4 说明

    • nbf 定义在什么时间之前,该jwt都是不可用的.
    • exp 过期时间
    • iss issuer 签发者
    • aud audience 听众,可以是scope,或者/resoures,表示接收jwt的一方
    • sub subject 主题,jwt所面向的用户
    • jti jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。
    • iat jwt的签发时间

    2. token应用流程?

    • Login:用户初次登录,输入用户名密码
    • 密码验证:服务器从数据库取出用户名和密码进行验证
    • 生成JWT:服务器端验证通过,根据从数据库返回的信息,以及预设规则,生成JWT
    • 返还JWT:服务器的HTTP RESPONSE中将JWT返还
    • 带JWT的请求:以后客户端发起请求,HTTP REQUEST HEADER的Authorizatio字段带上JWT,或者URL后面带上JWT

    3. .NET 库

    官方:https://jwt.io/#libraries-io

    4 .参考文献

    [基于Token的身份验证——JWT]http://www.cnblogs.com/zjutzz/p/5790180.html
    [~3种web会话管理的方式]http://www.cnblogs.com/lyzg/p/6067766.html#_label2

  • 相关阅读:
    LightOJ 1094
    hdu 2586
    hdu 5234
    hdu 2955
    LightOJ 1030 数学期望
    poj 1273
    CodeIgniter学习笔记(十五)——CI中的Session
    CodeIgniter学习笔记(十四)——CI中的文件上传
    CodeIgniter学习笔记(十三)——CI中的分页
    CodeIgniter学习笔记(十二)——CI中的路由
  • 原文地址:https://www.cnblogs.com/pengzhen/p/6944488.html
Copyright © 2011-2022 走看看