JWT&OAuth2 - 服务器是否存储令牌?他们如何安全/黑客安全?

use*_*532 19 security authentication oauth-2.0 jwt

在安全性,身份验证策略方面,我是一个完整的菜鸟.所以我正在阅读这篇关于"基于令牌的身份验证"的文章:https: //scotch.io/tutorials/the-ins-and-outs-of-token-based-authentication

我有两个问题:

  1. 我不明白为什么中间人(或黑客)无法看到客户端发送的令牌并使用相同的方式冒充客户/人来检索资源?是什么让JSON Web Tokens/OAuth2基于身份验证在这个意义上更安全?如果我们每次都使用一次性使用的令牌,我会理解即使黑客能够读取令牌,他也无法将其用于其他请求.但是,由于令牌在到期之前保持不变,这是一种更安全的身份验证策略?

  2. 服务器如何知道客户端发送的令牌是有效的,即服务器在登录期间与客户端交换的内容.服务器是否存储在数据库或某处生成的令牌并继续更新"上次访问的时间戳"或其他内容并继续删除last_accessed_time> 1小时前的令牌,以便在1小时不活动后继续使用它?

ped*_*ofb 29

我不明白为什么中间人(或黑客)无法看到客户端发送的令牌并使用相同的方式冒充客户/人来检索资源?

JWT不会保护您免受中间人(MITM)攻击.如果攻击者获得有效令牌,则可以有效地冒充.即使内容是加密的.

JWT应与SSL/TLS连接一起使用以避免MITM

是什么让JSON Web Tokens/OAuth2基于身份验证在这个意义上更安全?

JWT是一种令牌格式,oauth2是一种协议.oauth2可以使用jwt.Oauth2对于使用第三方站点的用户更安全,因为凭证仅从用户发送到主站点,然后站点发出可由第三方站点用于对用户进行身份验证的令牌.第三方站点永远不会看到用户凭据

但是,由于令牌在到期之前保持不变,这是一种更安全的身份验证策略?

阅读以上部分.您需要保护您的令牌不被盗:主要使用HTTPS或减轻其影响:使用HttpOnly存储在Cookie中(如果您不需要在客户端访问JWT内容),请设置过期时间短,旋转令牌......

服务器如何知道客户端发送的令牌是有效的,即服务器在登录期间与客户端交换的内容.

JWT的第三部分hhhh.pppp.ssss就是签名.签名是通过头和有效负载(hhhh.pppp)上的服务器私钥执行的,用于保护内容.如果攻击者更改内容或签名,服务器将检测到它验证签名并拒绝身份验证.

服务器是否存储在数据库或某处生成的令牌并继续更新"上次访问的时间戳"或其他内容并继续删除last_accessed_time> 1小时前的令牌,以便在1小时不活动后继续使用它?

这不是必需的.签名打包在令牌本身(ssss)中,因此据说JWT是自包含的

服务器具有加密密钥或密钥对,公共密钥和私有密钥对.令牌使用密钥(对于HMAC对称密钥)进行签名和验证,或者使用私钥签名并使用相应的公钥进行验证(对于RSA非对称密钥).