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

时间:2016-07-26 17:56:12

标签: 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小时不活动后继续使用?

2 个答案:

答案 0 :(得分:27)

  

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

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

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

  

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

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

  

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

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

  

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

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

  

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

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

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

答案 1 :(得分:1)

关于签署令牌而不加密令牌的全部内容。服务器只验证签名,JWT未加密(除非您实现它)。 不要在令牌中存储敏感数据,因为默认情况下它不会加密。