用户鉴权之JWT和AKSK

JWT和AK/SK

JWT和AK/SK都是用于鉴权的。

由于http的无状态性,为了避免每次登录时都去数据库查询用户信息,用户第一次登录后,应用需要保存用户登录信息,以便下次请求客户端时识别用户的身份。

通常我们可以采用session的方式来保存用户登录状态和用户信息。这种方式,会在服务端保存session信息,登录之后返回一个session_id,这样客户端每次请求的时候将session_id传到服务端。

使用session的方式会在服务器保存session信息,这样会占用服务器资源,下面介绍另外两种鉴权方式JWT和AKSK

1. JWT

JWT全称Json Web Token,用户登录后,服务器根据用户信息和签名生成一个token返回给客户端,之后客户端每次请求API的时候将token通过请求头传给服务端,服务端再对token进行验证来确认用户身份。

生成JWT包含三个要素:

  1. Header 描述token元数据的json字符串
{
	"alg":"HS256",
	"typ":"JWT"
}

alg描述签名所使用的算法,typ描述token的类型。

  1. Payload 保存token所传递的数据,格式为json字符串
{
	"uid":"123",
	"privilege":"123",
	"exp":"xxx"
}
  1. Signature 数字签名,主要用来验证token是否被篡改

生成JWT的过程:

  1. 对Header和Payload分别使用Base64进行编码。
  2. 然后将Header和Payload的Base64编码用点.连接起来(HeaderBase64.PayloadBase64)。
  3. 然后通过指定算法对连接后的字符串使用密钥进行计算生成数字签名Signature(sha256(HeaderBase64.PayloadBase64,secret))。
  4. 最后将HeaderBase64、PayloadBase64和Signature用点连接起来。

JWT验证的过程:

将token用点分隔,用base64对Header和Payload进行解码,然后使用算法和密钥进行计算,生成一个签名,比较签名是否一致,如果一直则说明鉴权通过。

2.AK/SK

AK:Access Key Id

SK:Secret Access Key,用户需要保管好自己的SK。

通过API网关向下层服务发送请求时,使用AK(Access Key ID)、SK(Secret Access Key)对请求进行签名。AKSK使用对称加密算法。

生成签名token的过程:

  1. 将AK和时间戳Timestamp组成Header,通过json进行序列化,引入时间因子可以控制token的过期
  2. 用SK对Header的json串进行HS256计算生成Signature
  3. 将AK/Signature/Timestamp组成token

AKSK相比较于JWT,不用将自己的Secret Key提交给服务器,而是在本地进行签名,然后用签名进行认证。aksk更安全一些,像华为云,微信平台,阿里云都采用aksk这种方式进行认证。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值