首页 > 其他分享 >TOKEN和JWT

TOKEN和JWT

时间:2023-06-03 22:25:05浏览次数:37  
标签:JWT TOKEN Session 服务器 声明 客户端

HTTP协议是一种无状态的协议。也就是第一次携带用户名和密码认证后。下一次访问HTTP协议不会携带认证的信息。这就需要传递认证信息。 传统的服务器识别客户端都是通过Session。当一个客户端连接到服务器之后,一般都会经过认证,会在服务器上创建出Session。当返回响应时,会将Session的标识一起返回给客户端。也就是SessionId。对于客户端来说就是Cookie。之后访问都会自动携带Cookie。但是会存在以下问题:

1、服务器保存所有的Session,随着客户端增多,服务器开销会增大。

2、移动端,比如手机等没有Cookie

3、分布式系统不适用,Session是保存到特定的服务器上的。比如Session保存在机器A,下次访问到机器B,但是机器B不存在Session。有特定的解决方法,就是Session共享。

4、Cookie是自动携带的,会有CSRF攻击的风险。

5、Cookie无法跨域,对单点登录不适用。

 

如果认证成功后,将认证信息,比如一些随机字符串经过摘要或数字签名后发送给客户端,客户端保存这些信息,以后访问都携带,比如通过请求头或Cookie携带,服务器通过摘要或数字签名判断这些信息的有效性(不需要知道这些信息是什么)。这就是TOKEN了。简单来说,TOKEN就是一个字符串。TOKEN是保存在客户端上的,并且经过服务器认证成功后生成的。服务器会校验TOKEN的有效性,如果篡改了,会校验失败。同时还有很多好处:

1、支持跨域访问,要将TOKEN放在请求头中。

2、无状态。TOKEN不需要保存在服务器的Session中。

3、更适用CDN:可以通过内容分发网络请求服务端的所有资料

4、适用移动端

5、不需要考虑CSRF攻击

那么JWT又是什么呢?JWT是TOKEN是实现之一。JWT全称是JSON Web Token,是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于作为JSON对象在各方之间安全地传输信息。此信息是经过数字签名的,因此可以验证和信任。JWT可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。官网地址是:https://jwt.io/

 

JWT以其紧凑的形式由三部分组成,三部分由点(.)分隔

  1. Header(头部)

  2. Payload(负载)

  3. Signature(签名)

因此,JWT通常如下所示。

xxxxx.yyyyy.zzzzz

Header通常由两部分组成:令牌的类型(JWT)和所使用的签名算法(如HMAC SHA256或RSA)。比如:

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

然后,这个JSON被Base64Url编码(不是加密),以形成JWT的第一部分。

Payload

令牌的第二部分是有效负载,其中包含声明。声明是关于实体(通常是用户)和附加数据的声明。有三种类型声明:已注册、公有,私有。

  1. 注册声明:这些是一组预定义的声明,不是强制性的,但建议使用,以提供一组有用的、可互操作的声明。它们分别是:

    iss(发布者)
    sub(主题)
    aud(用户)
    exp(过期时间)
    nbf(在此时间或日期之前不可用)
    iat(发布时间)
    jti(标识JWT的JWT ID)

  2. 公开声明:这些声明可以由使用JWT的人随意定义。但为了避免冲突,它们应该在IANA JSON Web令牌注册表中定义,或者定义为包含抗冲突命名空间的URI。

  3. 私有声明:这些是为在同意使用它们的各方之间共享信息而创建的自定义声明,既不是注册声明也不是公开声明。比如:

 

{
  "sub": "1234567890",
  "name": "Helen",
  "admin": true
}

然后对有效载荷进行Base64Url编码,以形成JSON Web令牌的第二部分。
 
注意:JWT经过加密,不要将敏感信息放到里面。

Signature

要创建签名部分,您必须获取编码的标头、编码的有效载荷、秘钥、标头中指定的算法,并对其进行签名。

例如,如果要使用HMAC SHA256算法,则将以以下方式创建签名:

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

签名用于验证消息在发送过程中没有更改,在使用私钥签名的令牌的情况下,它还可以验证JWT的发送者是否就是它所说的那个人。

 

可以在jwt官网生成和校验jwt:
 

 

标签:JWT,TOKEN,Session,服务器,声明,客户端
From: https://www.cnblogs.com/shigongp/p/17454635.html

相关文章

  • .NET Core WebAPI 认证授权之JWT
    @@.NETCoreWebAPI认证授权之JWT--google from --->NETCoreWebAPI认证授权之JWT(二)  在上一篇 《.NET缓存系列(一):缓存入门》中实现了基本的缓存,接下来需要对缓存进行改进,解决一些存在的问题。一、缓存过期策略问 题:当源数据更改或删除时,服务器程序并不知道,导......
  • NET Core WebAPI 认证授权之JWT
    @@.netcoretoken非对称加密 --Google-->@@wepapi认证授权之jwt NETCoreWebAPI认证授权之JWT(二):HMAC算法实操  一、前言在上一篇 《.NETCoreWebAPI认证授权之JWT(一):JWT介绍》中讲到了JWT的组成,分为三部分,其中标头(header)和载荷(payload)都只是简单的将json......
  • 消失的 Token
    习题链接消失的Token课程列表现在有一个页面,一个输入框一个按钮输入admin,点击按钮就切换页面关键点Vuex状态管理Vuex其实就是对数据统一管理因为可能要管理的数据太多了,所以Vuex里面有一个配置项modules进行注册,本题就是注册了user和base,将不同的功能模块拆分为一个......
  • net core-jwt
    namespaceJWTWebApi.JWT;publicclassJwtOptions{///<summary>///签发者///</summary>publicstringIssuer{get;set;}///<summary>///接收者///</summary>publi......
  • git指定用户名或token下载,从指定分支拉取代码并上传到指定分支
    指定用户名下载 密码中如果有某些符号如'>',我们需给他编码'%3E'gitclonehttps://username:[email protected]/xxx.git 指定token下载  附带代理(生成token时一定要保存,否则以后看不到的)gitclonehttps://[email protected]/xxx.git--config"http.proxy=http:......
  • 基于shiro+jwt的真正rest url权限管理,前后端分离
    bootshiro&usthebootshiro是基于springboot+shiro+jwt的真正restfulURL资源无状态认证权限管理系统的后端usthe是restfulURL资源无状态认证权限管理系统的前端,基于angular+typeScript+adminLte区别于一般,提供页面可配置式的,动态的restfulapi安全管理支持数据传输动态......
  • 【杂文】重新审视 ViT 中的 Token 表示
    ......
  • mock拦截axios请求,以及axios请求拦截设置token
     直接上源码:<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>mock拦截axios请求</title></head><body><!--本地npm安装mock和axios--><!--<scriptsrc="../node_modu......
  • JWT oss登录
    可参考:https://juejin.cn/post/7106702145520402468流程组成部分1.Header(头)作用:记录令牌类型、签名算法等例如:{“alg":"HS256","type","JWT}2.Payload(有效载荷)作用:携带一些用户信息例如{"userId":"1","username":"mayikt"}3.Sign......
  • Cookie、Session、Token、LocalStorage、SessionStorage
    Cookie简介:HTTP是无状态的,服务器无法记录收到的每一次请求,意味着服务器无法识别不同的请求是否来自相同的客户端。Cookie是服务器创建的一个对象,在收到客户端请求后,携带在响应头(Set-Cookie)中返回给客户端,客户端将Cookie存到本地,在下一次请求中将Cookie信息放到请求头发......