zoukankan      html  css  js  c++  java
  • 什么是JWT

    1、什么是JWT?

    JWT(JSON WEB TOKEN)是一个开放标砖(RFC 7519)。它作为一种Token格式,定义 了一种紧凑的、自包含的方式,用于在多方之间安全的传输JSON格式的信息。由于所传输的信息会被签名,因此Token能够被验证并信任;它支持使用HMAC算法或者是RSA的公私密钥对进行签名。JWT可用于多种目的,比如作为Bearer Token用来实现认证功能,这也是JWT最创建的用法;此外,它还可以用于安全地传递信息。

    JWT由3部分组成,头部(Header)、负载(Payload)、签名(Signature),每部分之间以.分隔。

    • Header
      • 声明类型,这里是jwt
      • 声明加密的算法 通常直接使用 HMAC SHA256

    例如:

    {
      'typ': 'JWT',
      'alg': 'HS256'
    }
    
    • Playload
      负载部分包括要 传输的信息,通常由多个Claim(声明)构成,Claim是 与实体(通常是用户)相关的信息以及其他元数据,每个Claim包括两部分:类型名。在负载中的Claim由3中类型:已注册、公共、私有。

    已注册的常见类型如下表

    代 码 名 称 描 述
    iss Issuer 签发者
    sub Subject 主题
    aud Audience 接收方
    exp Expriation time 过期时间
    nbf Not before JWT有效的开始时间
    iat Issue at 签发JWT时的时间
    jti JWTID JWT的唯一标识符

    上述代码中都是3个字符,就是为了保证JWT的紧凑性

    例如:

    {
      "sub": "1234567890",
      "name": "John Doe",
      "admin": true
    }
    
    • 签名(Signature)
      Signature是用来验证发送者的JWT的同时也能确保在期间不被篡改。

    一个典型的 JWT内容如下:

    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6ImFkbWluIiwiZW1haWwiOiJ4aGwuam9ubnlAZ21haWwuY29tIiwiTWFuYWdlSWQiOiJhZG1pbiIsInJvbGUiOiJhZG1pbiIsIm5iZiI6MTU4NjE1Mjc1OSwiZXhwIjoxNTg2MTUyOTM5LCJpYXQiOjE1ODYxNTI3NTl9.Mk2OxomGOGYFt5tttIneuOq-K59RfgXGekDNPNYcegc
    

    注意:由于Token中的内容都是通过Base64编码,因此它也是很容易被解码,所以不应该在Token中包含敏感信息,如用户密码等。

    2、总结

    2.1、优点

    • 因为JSON的通用性,所以JWT是可以进行跨语言支持的。
    • 因为有了payload部分,所以JWT可以在自身存储一些其他业务逻辑所必要的非敏感信息。
    • 便于传输,JWT的构成非常简单,字节占用很小,所以它是非常便于传输的。
    • 不需要在服务端保存会话信息,。

    2.2、安全相关

    • 不应该在jwt的payload部分存放敏感信息,因为该部分是客户端可解密的部分。
    • 保护好secret私钥,该私钥非常重要。

    参考文档:https://www.jianshu.com/p/576dbf44b2ae
    ASP.NET Core 与RESTful API开发实战(杨万青 著)

  • 相关阅读:
    C#获取局域网MAC地址
    查看Linux是32位还是64位的方法
    JS判断不能为空实例代码
    SQL2005数据库行列转换
    mysql 导入导出数据库、数据表的方法
    linux kill 关闭进程命令
    设置CentOS控制台分辨率图文详解
    Windows 2003 IIS 不支持ASP问题的解决方法
    稳聘App设计图分享
    Sql 中存储过程详细案例
  • 原文地址:https://www.cnblogs.com/cqxhl/p/12993258.html
Copyright © 2011-2022 走看看