ASP.NET Core* 基于JWT的认证(一) (2)

第二部分是荷载信息,Payload,你可以理解为我们的JWT是一辆大仓库,第一部分头部就是仓库的名称编号等基础信息,而荷载信息就是仓库的本身,包含了仓库里面的所有货物。这些信息又包含了三个部分:

标准中注册的声明

公共的声明

私有的声明

标准中注册的声明 (建议但不强制使用)

iss: jwt签发者

sub: jwt所面向的用户

aud: 接收jwt的一方

exp: jwt的过期时间,这个过期时间必须要大于签发时间

nbf: 定义在什么时间之前,该jwt都是不可用的.

iat: jwt的签发时间

jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。

公共的声明 :

公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要息。但不建议添加敏感信息,因为该部分在客户端可解密。

私有的声明 :

私有声明是提供者和消费者所共同定义的声明,一般不建议存放敏感信息,因为base64是对称解密的,意味着该部分信息可以归类为明文信息。

事实上我们的Header和Payload都是基于base64加密的,这种密文都是可以对称解密的,因此请不要存放敏感信息。

定义一个payload:

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

进行base64加密后,得到了我们的第二部分

eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9 Signature

Jwt的第三部分是一个签证信息,这个签证信息由三部分组成:

header (base64后的)

payload (base64后的)

secret

这一部分可以理解为对前部分的一个校验,将前两部分加密后的密文通过在Header中定义的加密方式,与服务端所传入的密钥进行一次加密,假如前两部分的信息被篡改的话,必然通不过最后一部分签证的校验。因此通过这样保证了Jwt的安全性。

因此,保存并隐藏好我们的加密密钥是非常重要的,假设泄露了,就意味着任何知道密钥的人都可以轻松的对jwt进行自我签发和验证。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpsdff.html