计算机网络之Token、JWT

计算机网络之Token、JWT,第1张

文章目录
  • 计算机网络之Token、JWT
    • 1.登录验证的方式
    • 2.token定义
    • 3.taken刷新
    • 4.JWT跨域认证
    • 5.JWT跨域认证起源
    • 6.JWT原理
    • 7.JWT的数据结构
      • 7.1介绍
      • 7.2Header
      • 7.3Playload
      • 7.4Signature
      • 7.5Base64URL
    • 8.JWT组成部分
    • 9.JWT使用方式
    • 10.JWT特点
    • 11.传统身份验证的方法
    • 12.基于 Token 的身份验证方法
    • 11.JWT介绍
    • 12.JWT认证流程
    • 13.JWT组成
    • 14.Authorization
    • 15.WWW-Authenticate
    • 16.HTTP Bearer认证

计算机网络之Token、JWT 1.登录验证的方式

2.token定义

3.taken刷新

4.JWT跨域认证

5.JWT跨域认证起源

6.JWT原理

7.JWT的数据结构 7.1介绍

7.2Header

7.3Playload

7.4Signature

7.5Base64URL

8.JWT组成部分

一个JWT由三部分组成:
Header(头部) —— base64编码的Json字符串
Payload(载荷) —— base64编码的Json字符串
Signature(签名)—— 使用指定算法,通过Header和Payload加盐计算的字符串
各部分以" . "分割,如:
eyJhbGciOiJIUzUxMiJ9.eyJjcnQiOjE1MjgzNDM4OTgyNjgsImV4cCI6MTUyODM0MzkxOCwidXNlcm5hbWUiOiJ0b20ifQ.E-0jxKxLICWgcFEwNwQ4pfhdMzchcHmsd8G_BTsWgkUmVwPzDd7jJlf94cAdtbwTLMm27ouYYzTTxMXq7W1jvQ
直接通过base64解码可获得:
Header:
{“alg”:“HS512”}
Payload:
{“crt”:1528343898268,“exp”:1528343918,“username”:“tom”}

9.JWT使用方式

10.JWT特点

11.传统身份验证的方法

传统身份验证的方法
HTTP 是一种没有状态的协议,也就是它并不知道是谁是访问应用。这里我们把用户看成是客户端,客户端使用用户名还有密码通过了身份验证,不过下回这个客户端再发送请求时候,还得再验证一下。
解决的方法就是,当用户请求登录的时候,如果没有问题,我们在服务端生成一条记录,这个记录里可以说明一下登录的用户是谁,然后把这条记录的 ID 号发送给客户端,客户端收到以后把这个 ID 号存储在 Cookie 里,下次这个用户再向服务端发送请求的时候,可以带着这个 Cookie ,这样服务端会验证一个这个 Cookie 里的信息,看看能不能在服务端这里找到对应的记录,如果可以,说明用户已经通过了身份验证,就把用户请求的数据返回给客户端。
上面说的就是 Session,我们需要在服务端存储为登录的用户生成的 Session ,这些 Session 可能会存储在内存,磁盘,或者数据库里。我们可能需要在服务端定期的去清理过期的 Session 。

12.基于 Token 的身份验证方法

使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:
1.客户端使用用户名跟密码请求登录
2.服务端收到请求,去验证用户名与密码
3.验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
4.客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
5.客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
6.服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据

11.JWT介绍

实施 Token 验证的方法挺多的,还有一些标准方法,比如 JWT,读作:jot ,表示:JSON Web Tokens
在典型业务场景中,为了区分用户和安全保密,必须对API请求进行鉴权,
但是不能要求每一个请求都进行登录 *** 作。合理做法是,在第一次登录之后产生一个有一定有效期的tokn,并将其存储于浏览器的Cookie或LocalStorage之中,之后的请求都携带该token,请求到达服务器端后,服务器端用该tokn对请求进行鉴权。在第一次登录之后,服务器会将这个token用文件、数据库或缓存服务器等方法存下来,用于之后请求中的比对。或者,更简单的方法是,直接用密钥对用户信息和时间戳进行签名对称加密,这样就可以省下额外的存储,也可以减少每一次请求时对数据库的查询压力。这种方式,在业界已经有一种标准的实现方式,该方式被称为JSON Web Token(JWT,音同jot,详见JWT RFC7519)。
token的意思是“令牌”,里面包含了用于认证的信息。这里的token是指JSON Web Token(UWT)。

12.JWT认证流程

1.客户端使用用户名和密码请求登录
2.服务端收到请求后会去验证用户名和密码,如果用户名和密码跟数据库记录不一致则验证失败,如果一致则验证通过,服务端会签发一个Token返回给客户端
3.客户端收到请求后会将Token缓存起来,比如放在浏览器Cookie中或者本地存储中,之后每次请求都会携带该Token
4.服务端收到请求后会验证请求中携带的Tokn,验证通过则进行业务逻辑处理并成功返回数据

13.JWT组成

在JWT中,Token有三部分组成,中间用.隔开,并使用Base64编码:
header
payload
signature
如下是JWT中的一个Token示例:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1MjgwMTY5MjIsImlkIjowLCJuYmYiOjE1MjgwMTY5MjIsInVzZXJuYW1lIjoiYWRtaW4ifQ.LjxrK9DuAwAzUD8-9v43NzWBN7HXsSLfebw92DKd1JQ

header介绍
JWT Token的header中,包含两部分信息:
1.Token的类型
2.Token所使用的加密算法
例如:
{
“typ”: “JWT”,
“alg”: “HS256”
}
该例说明Token类型是WT,加密算法是HS256(lg算法可以有多种)。
上面的内容要用 Base64 的形式编码一下,所以就变成这样:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

Payload载荷介绍
Payload中携带Token的具体内容,里面有一些标准的字段,当然你也可以添加额外的字段,来表达更丰富的信息,可以用这些信息来做更丰富的处理,比如记录请求用户名,标准字段有:
1.iss:JWT Token的签发者
2.Sub:主题
3.exp:JWT Token过期时间
4.aud:接收WT Token的一方
5.iat:WT Token签发时间
6.nbf:JWT Token生效时间
7.jti:JWT Token ID
比如下面这个 Payload ,用到了 iss 发行人,还有 exp 过期时间。另外还有两个自定义的字段,一个是 name ,还有一个是 admin 。
{
“iss”: “ninghao.net”,
“exp”: “1438955445”,
“name”: “wanghao”,
“admin”: true
}
使用 Base64 编码以后就变成了这个样子:
eyJpc3MiOiJuaW5naGFvLm5ldCIsImV4cCI6IjE0Mzg5NTU0NDUiLCJuYW1lIjoid2FuZ2hhbyIsImFkbWluIjp0cnVlfQ
header
payload
secret

Signature签名介绍
JWT 的最后一部分是 Signature ,Signature是Token的签名部分,这部分内容有三个部分,把用 Base64 编码的 header.payload与header再用加密算法加密一下,加密的时候要放进去一个 Secret ,这个相当于是一个密码,这个密码秘密地存储在服务端,加密后的内容即为Signature
注:一般通过配置文件来配置Secret的值,通常配置在conf/config.yaml配置文件中
var encodedString = base64UrlEncode(header) + “.” + base64UrlEncode(payload);
HMACSHA256(encodedString, ‘secret’);
处理完成以后看起来像这样:
SwyHTEx_RQppr97g4J5lKXtabJecpejuef8AqKYMAJc

最后这个在服务端生成并且要发送给客户端的 Token 看起来像这样:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJuaW5naGFvLm5ldCIsImV4cCI6IjE0Mzg5NTU0NDUiLCJuYW1lIjoid2FuZ2hhbyIsImFkbWluIjp0cnVlfQ.SwyHTEx_RQppr97g4J5lKXtabJecpejuef8AqKYMAJc
签名后服务端会返回生成的Token,客户端下次请求会携带该Token,服务端收到Token后会解析出header.payload,然后用相同的加密算法和密码对header.payload再进行一次加密,并对比加密后的Token和收到的Token是否相同,如果相同则验证通过,不相同则返回HTTP401 Unauthorized的错误。

14.Authorization


15.WWW-Authenticate


16.HTTP Bearer认证

http认证根据凭证协议的不同,划分为不同的方式。常用的方式有:
HTTP基本认证
HTTP摘要认证
HTTP Bearer认证
本篇文章介绍HTTP Bearer认证。
下面通过图详细的了解下HTTP Bearer认证过程:

Bearer认证也是http协议中的标准认证方式,在Bearer认证中的凭证称为Bearer_token 或者Access_token。该种方式的优点就是灵活方便,因为凭证的生成和验证完全由开发人员设计和实现。一般凭证的设计尽量能保证以下几点:
1.用户信息安全性,即保证重要信息不被泄露和恶意破解
2.避免重放攻击
3.更方便的适应更多的应用场景,主要体现在在服务端不需要凭证状态保存,分布式场景中,不需要状态共享
4.少查库,减少服务端负担。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/866648.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-12
下一篇 2022-05-12

发表评论

登录后才能评论

评论列表(0条)

保存