我试图理解网络令牌的概念(具体来说是 json 网络令牌)。但是,我找不到有关如何在服务器上验证令牌的任何信息。
A= 客户端
B= 服务器
流程:
1)A -> B:客户端发送用户名和密码
2)B:服务器根据数据库记录检查它们,如果匹配则创建;首先,签名使用:base64UrlEncode(header).base64Url(payload), #secret#然后令牌使用:signature.payload.secret
3) A <- B: 服务器将令牌发送回客户端
4) A -> B: 客户端发送请求使用标头中的令牌访问某个 URL
5) B:服务器解码标头和有效载荷,使用#secret#创建另一个数字签名并将其与发送的内容进行比较以确保完整性
如果上述流程正确,则引出以下问题:
1) 是否有 SSL 包裹?如果没有人可以劫持令牌并将其发送到服务器并且用户模拟客户端
2) 在步骤 5 中,只有完整性检查,从令牌解密的有效负载数据未针对 DB(例如用户名)进行验证,是否应进行验证或者一旦确认完整性,我们就可以确定令牌有效并且应用程序可以授予对客户端的访问权限?
3) #secret# 是否只有服务器知道并且仅用于验证有效负载未被篡改?我认为是这样,否则可能会发生用户冒充。