使用Spring Security Oauth2 和 JWT保护微服务

学习自深入理解微服务
采用Spring Security OAuth2 和 JWT的方式,Uaa服务只需要验证一次,返回JWT。返回的JWT包含了用户的所有信息,包括权限信息
从三个方面讲解:

  • JWT详解
  • Spring Security Oauth2和JWT保护微服务案例详解
  • 总结

JWT简介

什么是JWT

JSON Web TOken(JWT)是一种开放的标准(RFC7517),JWT定义了一种紧凑且自包含的标准,该标准旨在将各个主体的信息包装成JSON对象。主体信息通过数字签名进行加密和验证的。常使用HMAC算法或RSA算法(公钥/私钥非对称性加密)算法对JWT进行签名,安全性很高,下面解释JWT的特点:

  • 紧凑型(compact):由于是加密后的字符串,JWT数据体积非常小,可以通过POST请求或者Http请求头发送,另外,数据体积小意味着传输速度很快
  • 自包含(self-contained):JWT包含了主体的所有信息,所以避免每个请求都需要向Uaa服务验证身份,降低了服务器的负载

JWT的结构

JWT由三个部分组成,分别以’.'分隔,组成部分如下。

  • header(头)
  • Payload(有效载荷)
  • Signature(签名)
    因此JWT的通常格式如下
xxxxxxxxxxx.yyyyyyy.zzzzzz

下面来讲解这三个组成部分

  1. Header
    header通常有两部分组成,令牌的类型(即JWT)和使用的算法类型,如HMAC,SHA256和RSA。例如:
{
	"alg":"HS256"
	"typ":"JWT"
}

将Header用Base64编码作为JWT的第一部分
2. Payload
这是JWT的第二部分,包含了用户的一些信息和Claim(声明,权利)。有三种类型的claim:保留,私人和公开。一个典型的Payload如下:

{
"sub":"1234567890"
"name":"John Doe"
"admin":true
}

将Payload用Base64编码作为JWT的第二部分
3. Signature
要创建签名部分,需要将base64编码后的Header,PayLoad和密钥进行签名,一个典型的格式如下:

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

JWT的应用场景

什么时候使用JWT呢?JWT的使用场景如下:

  • 认证:这是使用JWT的最常见的场景。一旦用户登录成功获取JWT之后,后续每个请求将携带该JWT。该JWT包含了用户信息,权限点等信息,根据JWT包含的信息,资源服务可以控制该JWT可以访问的资源范围,因为JWT的开销很小,并且能够在不同的域中使用,因此单点登录是一个广泛使用JWT的场景
  • 信息交换:JWT是在各方之间安全传输信息的一种方式,JWT使用签名加密,安全性很高。另外,当使用Header和PayLoad计算签名时,还可以验证内容是否被篡改

如何使用JWT

下面来看最常见的应用场景,即认证
—先吃饭

发布了29 篇原创文章 · 获赞 3 · 访问量 543

猜你喜欢

转载自blog.csdn.net/weixin_43404791/article/details/104649808