> 文章列表 > SpringSecurity之权限中JWT应用

SpringSecurity之权限中JWT应用

SpringSecurity之权限中JWT应用

目录

前言

什么是J W T

1、访问令牌

2、J W T组成内容

J W T 头

有效载荷

签名哈希

Base64URL算法


前言

上一篇我们讲解了SpringSecurity之微服务权限解决方案,接下来我们看看在微服务中使用到的凭证Tokens的生成工具J W T

什么是J W T

1、访问令牌

自包含令牌 透明令牌

授权服务器进行令牌的颁发操作,包含了关于用户的元数据信息和声明(claims)

通过对签名的检验,期望的颁发者(issuer)、期望的接收人(auienced)以及scope。资源服务器可以在本地对令牌进行校验操作,通常实现签名的的JSON Web Tokens,也就是我们常说的J W T

随机生成字符串标识符,无法简单地猜测授权服务器是怎么办法和存储的。

资源服务器必须通过后台渠道发送回OAuth2授权服务器的令牌检查端点,这样才能检验令牌的有效状态,并且获取claims/scopes等其他的额外信息

2、J W T组成内容

eyJhbGciOiJIUzUxMiIsInppcCI6IkdaSVAifQ.H4sIAAAAAAAA_6tWKi5NUrJSSkzJzcxT0lFKzs8tSMyr9ExRssorzcnRUSotTi3yS8xNRVKTWlGgZGVoZm5hZGJsaW4BUQPSYQhklmZCtdYCAOmbbppbAAAA.wEtXn_lWnbqVDcTOyD_D2YbbZnHLljCpMqaOqXcecCXjTcfk8yvUQTO7EED-DKmSKoQ9Y8FaXNzaBWRoscPCbA

结构:base64url(Header)+base64url(Claims)+base64url(Signature)

其中三段之间使用“."隔开的。

从上面的结构我们可以看出来,其实这个凭证信息就是由三段字符串组成,中间有英文句号改开。组成一个很长的字符串凭证。

其实,每个子字符串都是一个功能模块,三个部分分别是:J W T头、有效载荷以及签名信息

J W T 头

这个头部分描述的是一个J W T元数据的json对象,通常如下所示:

{

“alg”:“HS256”,"typ":"JWT"

}

从上面的代码,alg属性他是标识签名使用的算法,默认的是HMAC SHA256;

type属性标识令牌的一个类型,J W T令牌他的统一写法就是J W T。然后在使用Base64url的算反将其转为字符串后进行保存。

有效载荷

这一部分就是我们的凭证的主体内容部分了,其实就是一个Json的对象,其中就含有传递的数据。他提供了7个字段供我们来选择

iss 发行人
exp 到期的时间
sub 主题信息
aud 用户信息
nbf

在这之前

不使用的

iat 发布的时间
jti

J W T ID用于标识

这个J W T信息
 

上面这个几个是我们默认的字段,我们也可以自定义自己的字段。

他也是使用Base64Url算法转换为字符串保存的。

注意:这个J W T默认是不进行加密操作的,所有人都能够解读到其内在的内容,所以在构建的时候,要谨慎使用隐私字段来存放保密信息,防止其会造成信息的泄露

签名哈希

这一部分,是对上面连个部分的数据签名操作,通过我们指定的算法进行哈希,用来确保数据不会被篡改。

1、需要指定一个密码(secret),他保存在我们服务端,不对外公布。

2、使用标头中已经制定的签名算法(默认HMAS SHA256)根据下面的公式进行签名

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

3、计算出来签名信息的哈希后,J W T头、有效载荷以及签名信息三个子串组成一个整体字符串,每个部分中间用“.”隔开,这样就构成了我们完整的J W T对象信息

Base64URL算法

J W T 头和有效载荷的序列化算法他们都用到了 Base64URL。

该算法和常见 Base64算法类似,稍有差别。

作为凭证的J W T可以放在URL中(例如 api.example/?token=xxx)。 Base64 中用的三个 字符是"+","/"和"=",由于在 URL 中有特殊含义,因此 Base64URL 中对他们做了替换: "="去掉,"+"用"-"替换,"/"用"_"替换,这就是 Base64URL 算法。

好了,关于J W T应用就介绍到这里!

欢迎大家点击下方卡片,关注《coder练习生》

网赚资料