2017-10-11 107 views
0


基于JSON网络令牌的服务器端的验证流程

我想了解网络令牌的概念(JSON网络令牌是特定的)。然而,我无法找到关于如何在服务器上验证令牌的任何信息。

A = CLIENT
B = SERVER

流量:

1)A - > B:客户端发送的用户名和密码
2)B:服务器检查它们对DB记录,如果它们匹配创建;首先,使用签名:base64UrlEncode(标题).base64Url(有效载荷),#秘密#然后令牌使用:signature.payload.secret
3)< - B:服务器发送回令牌客户
4)甲 - > B:客户端发送请求与令牌来访问某些网址在头
5)B:服务器解码头和有效负载,使用#秘密#创建另一个数字签名,并将其与什么被派去确保完整性
比较

如果上面的流程是正确的,它会引起以下问题:

1)是否有SSL缠绕它?如果不是任何人都可以劫持令牌并将其发送给服务器和用户模拟客户端
2)在步骤5中,只检查完整性,从令牌解密的有效负载数据不会根据数据库验证(例如用户名),如果它被验证,或者一旦完整性得到确认,我们可以肯定令牌是有效的,应用程序可以授予客户端访问权限?
3)是#秘密#只有服务器已知并且仅用于验证有效负载未被篡改?我会这样认为,否则用户冒充可能会发生。

回答

0

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

1)是否有SSL缠绕它?如果没有人可以劫持令牌并将其发送给服务器和用户冒充客户端

是的,它是,令牌必须被保护,因为是验证证明。它应该只被互换槽一个SSL/TLS连接

2)在步骤5中,仅存在完整性检查,从令牌解密的有效载荷数据不是针对DB验证(例如用户名),应验证或者一旦完整性得到确认,我们可以确定令牌是有效的,并且应用程序可以授予客户端的访问权限?

令牌用服务器的密钥签名,所以服务器会检测到任何变更,令牌会被拒绝。如果验证成功,您可以安全地使用有效载荷。

3)是否#秘密#只有服务器已知并且仅用于验证有效负载未被篡改?我假设是这样的,否则用户冒充可能发生

是的,密钥必须是“秘密”。如果你使用对称的HMAC密钥,它用来创建和验证令牌,所以如果你分享它,任何人都会创建令牌

+0

完美的,谢谢你的确认。 – Pawel