我正在尝试理解Web令牌的概念(具体来说是JSON Web令牌)。然而,我找不到任何关于服务器如何验证令牌的信息。
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步中,仅对完整性进行了检查,从令牌中解密出的有效负载数据未经过验证(例如用户名),是否应进行验证或一旦确认完整性,我们可以确定令牌有效,并且应用程序可以授予客户端访问权限?
3)#secret#只有服务器知道并且仅用于验证有效负载未被篡改吗?我认为是这样的,否则用户冒充可能会发生。