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

Posted

技术标签:

【中文标题】json web based token在服务器端的验证流程【英文标题】:The verification flow of json web based token on server side 【发布时间】:2018-03-23 09:15:35 【问题描述】:

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

A= 客户 B= 服务器

流程:

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

如果上述流程是正确的,它会提出以下问题:

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

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

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

【讨论】:

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

以上是关于json web based token在服务器端的验证流程的主要内容,如果未能解决你的问题,请参考以下文章

后端架构token授权认证机制:spring security JSON Web Token(JWT)简例

后端架构token授权认证机制:spring security JSON Web Token(JWT)简例

jwt( JSON Web Tokens)

session&token based auth登录方式描述

JWT——json web token

理解JSON Web Token