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

    什么是JSON Web Token

    JSON Web Token(JWT) 是一个开源标准,体积小且自包含的并且可以在两者间进行安全传输JSON对象。这些信息都是经过加密和签名。(常用一些算法HMAC和RSA 或者ECDSA)

    什么时候使用JSON Web Tokens?

    下面列出一些JSON Web Tokens 常用的一些场景:

    1. Authorization:这是使用JWT大多数最常用的场景,每次用户登陆系统,服务器生成一个JWT,随后每次客户端的请求都将JWT放到Header中,服务器端每次验证这个JWT,如果通过,允许用户访问API以及一些服务和资源,JWT被广泛使用在单点登录,因为整个体积比较小,可以很容易穿过不同域。

    2. Information Exchange:JWT是一个比较好的安全的方式在两者间进行消息传输,因为JWTs能被签名,例如,使用public公钥/private私钥对你能知道消息的发送方是谁, 额外, Header和payload也被计算在签名内,你也可以验证内容未被篡改。 

    JSON Web Token 组成结构是什么?

    JSON Web Tokens 由三部分组成通过.分割,他们是:

    • Header

    • Payload

    • Signature

    因此,一个JWT通常看上去像是下面:

    xxxxx.yyyyy.zzzzz

    让我们分解不同部分.

     

    Header

    Header 通常有两部分组成,类型和签名算法,例如 HMAC SHA256或者RSA。

    {

      "alg": "HS256",

      "typ": "JWT"

    }

    Header 经过Base64编码组成了JSON Web Token 第一部分

    Payload

    token的第二部分是Payload,里面包含claims,claims通常包含一个实体(通常用户) 和 额外数据,

    通常有三种类型的claims:registered,public,and private claims。

    1. Registered claims:这些是一组预定义的claims,不是强制性的,但建议使用, 提供一组有用的、可互操作的claims。其中一些是:iss(issuer)、exp(expiration time)、sub(subject)、aud(audience)等

    2. Public claims:这些可以由使用JWT的人随意定义,为了避免冲突,它们应该在 IANA JSON Web Token Registry中定义或定义为包含命名空间的URI。

    3. Private claims:这部分claims是为不同方之间共享信息,它既不是register claims 也不是public claims。

    下面是payload例子

    {

      "sub": "1234567890",

      "name": "John Doe",

      "admin": true

    }

    payload 经过Base64编码组成了JSON Web Token 第二部分

    Signature

    1. Base64 编码 header

    2. Base64 编码 payload

    3. secret 秘钥

    4. 签名算法是使用Header中指定的算法。

    例如如果你想使用HMAC SHA256算法,签名将通过下面方式被创建:

    HMACSHA256(

      base64UrlEncode(header) + "." +

      base64UrlEncode(payload),

      secret)

    签名用来验证消息是否被改变在整个传输过程中,在使用私钥签名的令牌的情况下,它还可以验证 JWT 的发送者是谁。

    字符串合并

    输出是三个由点分隔的 Base64字符串,可以在 HTML 和 HTTP 环境中轻松传递,同时与基于 XML 的标准(如 SAML)相比更加紧凑。

    下面显示的JWT是前面Header 和payload 编码,并且使用一个secret 签名之后。

    可以使用 jwt.io Debugger 来解码、验证和生成 JWT。

    JSON Web Tokens 如何工作?

    在验证中, 如果用户使用他们的凭证成功登陆,一个JSON Web Token将返回,由于tokens是凭证,因此必须非常小心保护以防止出现安全问题。通常,您不应将令牌保留的时间超过所需的时间。

    然而,用户想访问一个受保护的API和资源,用户需要发送这个JWT,通常使用Authorization头,使用Bearer 模式.

    Authorization: Bearer <token>

    在某些情况下,这是一个无状态机制,服务器只需要验证header中的Authorization是否是一个有效的JWT,如果存在,则允许用户访问资源。

    如果令牌在 Authorization 标头中发送,则跨源资源共享 (CORS) 不会成为问题,因为它不使用cookie 需要注意是使用签名tokens,所有的信息包含在token或者暴露给第三方,尽管不能改变它,但是尽量不要把安全的信息放到token中。

    为什么使用JSON Web Tokens?

    让我们来谈谈与Simple Web Token(SWT) 和Security Assertioin Markup Language Tokens(SAML)相比,JSON Web Token (JWT) 的优势。

    1.相比XML,JSON 体积更小。

    2.安全性方便要高。

    3.JSON 更容易映射到对象,相反,XML 没有自然的文档到对象映射。

    欢迎关注本人公众号

  • 相关阅读:
    vue+filesaver+xlsx导出table为excel
    layer弹窗第一次不居中。然后再点击就居中了。解决办法
    GitHub的Fork 是什么意思
    什么时候会发送options请求
    实现H5连接分享给好友或朋友圈自定义分享内容(标题、图片、简介)的方法代码
    vue的element的table表头自定义添加按钮
    小程序配置体验版添加参数
    迅为iMX8M Mini开发板硬件接口原理分析
    迅为i.MX8MM 核心板引脚说明(按功能划分)
    迅为3399开发板Ubuntu 系统双屏异显,双屏同显测试
  • 原文地址:https://www.cnblogs.com/netcoder/p/15119959.html
Copyright © 2011-2022 走看看