栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

用户鉴权之JWT和AKSK

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用户鉴权之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包含三个要素:

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

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

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

生成JWT的过程:

    对Header和Payload分别使用base64进行编码。然后将Header和Payload的base64编码用点.连接起来(Headerbase64.Payloadbase64)。然后通过指定算法对连接后的字符串使用密钥进行计算生成数字签名Signature(sha256(Headerbase64.Payloadbase64,secret))。最后将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的过程:

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/755777.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号