Jwt 基于jsonweb的服务端令牌验证流程

Jwt 基于jsonweb的服务端令牌验证流程,jwt,digital-signature,Jwt,Digital Signature,我试图理解web标记的概念(具体来说是json web标记)。但是,我找不到关于如何在服务器上验证令牌的任何信息。 A=客户 B=服务器 流程: 1) A->B:客户端发送用户名和密码 2) B:服务器根据数据库记录检查它们,并检查它们是否匹配;首先,签名使用:base64UrlEncode(header).base64Url(payload),#secret#,然后令牌使用:signature.payload.secret 3) A B:客户端发送请求,以访问标头中带有令牌的特定URL 5)


我试图理解web标记的概念(具体来说是json web标记)。但是,我找不到关于如何在服务器上验证令牌的任何信息。

A=客户
B=服务器

流程:

1) A->B:客户端发送用户名和密码
2) B:服务器根据数据库记录检查它们,并检查它们是否匹配;首先,签名使用:base64UrlEncode(header).base64Url(payload),#secret#,然后令牌使用:signature.payload.secret
3) A B:客户端发送请求,以访问标头中带有令牌的特定URL
5) B:服务器解码报头和负载,使用#secret#创建另一个数字签名,并将其与发送的数字签名进行比较,以确保完整性


如果上述流程正确,则会引发以下问题:

1) 它周围有SSL包吗?如果没有,任何人都可以劫持令牌并将其发送到服务器和用户模拟客户端
2) 在步骤5中,只检查了完整性,从令牌解密的有效负载数据没有根据DB(例如用户名)进行验证,如果验证了有效负载数据,或者一旦确认了完整性,我们就可以确定令牌是有效的,并且应用程序可以授予客户端访问权限?

3) #secret#是否仅为服务器所知,并且仅用于验证有效负载是否未被篡改?我想是这样,否则可能会发生用户模拟。

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

1) 它周围有SSL包吗?如果没有,任何人都可以劫持令牌并将其发送到服务器和用户模拟客户端

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

2) 在步骤5中,仅检查完整性,从令牌解密的有效负载数据未根据DB(例如用户名)进行验证,是否应进行验证,或者在确认完整性后,我们可以确定令牌有效,并且应用程序可以授予对客户端的访问权

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

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


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

服务器如何知道它应该使用哪个用户的密钥?@VikasVerma,使用服务器的密钥。它不引用用户的密钥。