服务器端基于json web的token验证流程

Paw*_*wel 10 digital-signature jwt


我试图理解网络令牌的概念(具体来说是 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# 是否只有服务器知道并且仅用于验证有效负载未被篡改?我认为是这样,否则可能会发生用户冒充。

ped*_*ofb 7

您描述的流程是正确的。您实际上已经回答了您自己的问题。

1) 是否有 SSL 包裹?如果不是任何人都可以劫持令牌并将其发送到服务器和用户模拟客户端

是的,令牌必须受到保护,因为它是身份验证证明。它只能通过 SSL/TLS 连接进行交换

2) 在第 5 步中,只有完整性检查,从令牌解密的有效载荷数据未针对 DB(例如用户名)进行验证,是否应进行验证或一旦确认完整性,我们就可以确定令牌是有效的并且应用程序可以授予访问客户端?

令牌使用服务器的密钥签名,因此服务器将检测到任何更改并且令牌将被拒绝。如果验证成功,您可以安全地使用有效负载。

3) #secret# 是否只有服务器知道并且仅用于验证有效负载未被篡改?我认为是这样,否则可能会发生用户冒充

是的,密钥必须是“秘密的”。如果您使用对称 HMAC 密钥,它用于创建和验证令牌,因此如果您共享它,任何人都可以创建令牌

  • @VikasVerma,使用服务器的密钥。它不涉及用户的密钥。 (2认同)