加密身份令牌有什么意义吗?

时间:2016-05-06 08:05:56

标签: web-services rest encryption cryptography

我正在开发一个宁静的Web服务,它需要保护。我使用令牌系统执行此操作,其中客户端通过请求标头传递对它们唯一的令牌。该服务必须通过HTTPS调用。

我已经看过一些加密令牌的文章,但这样做有什么好处,因为令牌自然会被HTTPS加密....

重读上述内容后,我意识到我的意思并不完全清楚......

我看到的文章为客户端提供了一个预加密的令牌,该令牌使用公钥加密。然后,他们在收到请求时解密此令牌,并根据存储的未加密令牌进行检查。对我而言,似乎没有任何好处,只需简单地给客户端一个未加密的令牌并节省整个解密开销....

1 个答案:

答案 0 :(得分:0)

我认为这是一个广泛的问题,答案将取决于您的要求。但是,在大多数情况下,您不需要在身份令牌中加密。

身份令牌(用于执行身份验证)可以是 opaque (除了值本身之外不显示任何细节的令牌,如随机字符串)或者可以自包含(如JSON Web Tokens)。

有关详细信息,请参阅以下内容:

随机字符串

可以通过生成随机字符串并将其持久保存到具有过期日期和与之关联的用户标识符的数据库来发出令牌。

JSON Web令牌(JWT)

RFC 7519定义,它是在两方之间安全地表示索赔的标准方法。 JWT是一个自包含的令牌,使您能够在有效负载中存储用户标识符,到期日期和任何您想要的(但不存储密码),这是一个编码为Base64的JSON。有效载荷可以由客户端解码和读取。

使用JWT,您可以执行无状态身份验证,也就是说,如果您不需要跟踪它们,则无需持久保存JWT令牌。只需通过验证服务器端的签名来检查令牌的完整性。

虽然通过持久化令牌,您可以使其无效并撤销其访问权限。要保持跟踪JWT令牌,而不是保留整个令牌,您可以保留令牌标识符(jti声明)和一些元数据(您发出令牌的用户,到期日期等),如果您需要。要找到一些与JWT合作的优秀资源,请查看http://jwt.io

对于具有加密技术的令牌,请查看RFC 7516中定义的JSON Web加密(JWE)。当您需要机密性时使用JWE,因此客户端将需要一个密钥来解密令牌的内容。