JwtBearer认证

阅读数:90 评论数:0

跳转到新版页面

分类

python/Java

正文

一、JWT

JWT(JSON Web Token)是一种基于JSON的开放标准(RFC 7519),用于创建在各方之间安全传输信息的令牌。JWT通常用于身份验证和信息交换,特别是在Web应用程序中。

JWT的原理是,服务器认证以后,生成一个JSON对象,发回给用户,用户与服务端通信都要携带这个JSON对象。

为了防止用户篡改数据,服务器在生成这个对象的时候,会加上签名。

JWT由三个部分组成,它们之间由点(.)分隔:

  • Header(头部)
  • Payload(负载)
  • Signature(签名)

1、Header

header典型由两部分组成:token的类型和算法名称。

 {
          "alg": "HS256", //alg属性表示签名的算法(algorithm),默认是 HMAC SHA256(写成 HS256)
          "typ": "JWT"   //typ属性表示这个令牌(token)的类型(type)
        }

这个JSON结构会被Base64Url编码,形成JWT的第一部分。

2、Payload

Payload部分包含所谓的claims(声明)。Claims是关于实体(通常是用户)和其他数据的声明。有三种类型的claims:registered(注册的),public(公共的)和private(私有的)。

  • Registered claims:这些是预定义的声明,不是必须的,但是推荐使用。例如:iss(发行者)、exp(过期时间戳)、sub(主题)、aud(观众)。
  • Public claims:可以随意定义,但为了避免冲突,它们应该在IANA JSON Web Token Registry中注册,或者包含一个命名空间以避免冲突。
  • Private claims:是发送方和接收方之间共同商定的声明。
{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

这个JSON结构也会被Base64Url编码,形成JWT的第二部分。

JWT规定了七个官方字段

(1)iss (issuer):签发人

(2)exp (expiration time):过期时间

(3)sub (subject):主题

(4)aud (audience):受众

(5)nbf (Not Before):生效时间

(6)iat (Issued At):签发时间

(7)jti (JWT ID):编号

另外,还可以定义私有字段。

3、Signature

Signature 部分是对前两部分的签名,防止数据篡改。

为了创建签名部分,你必须使用编码后的header和payload,以及一个密钥,使用header中指定的算法进行签名。

例如,如果要使用HMAC SHA256算法:

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

签名用于验证消息在途中没有被改变,并且,对于使用私钥签名的令牌,它还可以验证JWT的发送方是谁。

4、JWT的使用流程

  • 用户认证:用户通过用户名和密码登录系统。
  • 生成JWT:认证服务器验证用户的凭据,如果有效,它将创建一个JWT,并将其返回给用户。
  • 客户端存储JWT:客户端应用程序存储JWT,通常是在cookie或localStorage中。
  • 发送JWT:客户端在随后的请求中发送JWT,通常是在HTTP头的Authorization字段中带Bearer标记。
  • 服务器验证JWT:服务器验证JWT的签名,以确保它的有效性,并从中提取用户信息和权限,进行相应的操作。
  • JWT过期:JWT通常会有一个过期时间,在此时间后将不再有效。用户需要重新认证以获取新的JWT。

5、安全注意事项

  • 应当确保HTTPS用于客户端和服务器之间的所有通信,以防止中间人攻击。
  • 不要在JWT中存储敏感信息,因为Base64编码是可逆的,除非它被加密。
  • 应当为JWT设置合理的过期时间,以减少令牌被盗用的风险。
  • 保护好签名密钥,特别是使用对称加密算法时,因为任何知道密钥的人都可以生成有效的JWT。

二、Bearer认证

Bearer验证属于HTTP协议标准验证,详细定义见RFC6570

     +--------+                               +---------------+
     |        |--(A)- Authorization Request ->|   Resource    |
     |        |                               |     Owner     |
     |        |<-(B)-- Authorization Grant ---|               |
     |        |                               +---------------+
     |        |
     |        |                               +---------------+
     |        |--(C)-- Authorization Grant -->| Authorization |
     | Client |                               |     Server    |
     |        |<-(D)----- Access Token -------|               |
     |        |                               +---------------+
     |        |
     |        |                               +---------------+
     |        |--(E)----- Access Token ------>|    Resource   |
     |        |                               |     Server    |
     |        |<-(F)--- Protected Resource ---|               |
     +--------+                               +---------------+

Bearer认证的核心是Token,它的颁发和验证完全由我们自己的应用程序来控制,而不依赖于系统和Web服务器,Bearer验证的标准请求方式如下:

Authorization: Bearer [BEARER_TOKEN] 



相关推荐

JJWT 全称Java Json Web Token。 而JWT是一种在两方之间传输信息的方法,在jwt的主体中编码的信息被称为claims。jwt的扩展形式是json,因此每个c

什么是jwt (json web token)jwt是一生中用来在网络上声明某种身份的令牌(TOKEN),它的特点是紧凑且自包含并且基于JSON,通过一些常用的算法对包含的主体