服务器端json个web based token的验证流程

The verification flow of json web based token on server side


我正在尝试了解网络令牌的概念(json 网络令牌具体而言)。但是,我找不到有关如何在服务器上验证令牌的任何信息。

A= 客户
B=服务器

流量:

1) A -> B: 客户端发送用户名和密码
2)B:服务器根据数据库记录检查它们,如果它们匹配则创建;首先,签名使用:base64UrlEncode(header).base64Url(payload), #secret# 然后令牌使用:signature.payload.secret
3) A <- B: 服务器向客户端发回令牌
4) A -> B: Client 发送请求访问某个 URL with token in header
5)B:服务器解码header和payload,使用#secret#创建另一个数字签名并将其与发送的内容进行比较以确保完整性


如果上面的流程是正确的,它回避了以下问题:

1) 是否有 SSL 包裹?如果不是任何人都可以劫持令牌并将其发送到服务器和用户冒充客户端
2) 在第 5 步中,只有完整性检查,从 token 解密的 payload 数据没有根据 DB 进行验证(例如用户名),如果它被验证或者一旦完整性被确认我们可以确定 token 是有效的并且应用程序可以授予访问客户端 ?
3) #secret# 是否只为服务器所知并且仅用于验证有效负载未被篡改?我想是的,否则可能会发生用户模仿。

您描述的流程是正确的。您几乎已经回答了您自己的问题。

1) Is there a SSL wrapped around it ? If not anyone could hijack the token and send it to server and user impersonate the client

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

进行交换

2) In step 5, there is only integrity checked, the payload data decrypted from token is not verified against DB (for example username), should it be verified or once integrity is confirmed we can be certain the token is valid and application can grant access to the client ?

令牌是用服务器的密钥签名的,因此服务器会检测到任何更改,并且令牌会被拒绝。如果验证成功就可以安全使用payload了。

3) Is #secret# only known to server and used only to validate payload was not tampered with ? I'd presume so, otherwise user impersonation could happen

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