在基于令牌的身份验证中,令牌如何得到验证?

时间:2016-10-05 00:49:35

标签: web-services authentication jwt

我读过很多基于令牌的身份验证文章,他们通常无法解释服务器如何验证令牌。我理解:

  1. 用户请求使用用户名/密码访问
  2. 应用程序验证凭据
  3. 应用程序向客户端提供签名的令牌
  4. 客户端存储该令牌并将其与每个请求一起发送
  5. 服务器验证令牌并使用数据进行响应
  6. 但第5步具体如何发生?

2 个答案:

答案 0 :(得分:0)

这取决于。令牌可以是用户名的哈希值,密码和客户端生成的密钥,它可以只是随机的并存储在数据库中,对此没有唯一的答案

答案 1 :(得分:0)

基于令牌的身份验证术语可以在几个上下文中使用,因此答案将始终取决于确切的问题。您确实使用JWT(JSON Web Tokens)标记了您的问题,因此我将通过基于该标记绘制一些假设来回答这个问题。

  

JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,以便在各方之间安全地传输信息一个JSON对象。此信息可以通过数字签名进行验证和信任。 JWT可以使用秘密(使用HMAC算法)或使用RSA的公钥/私钥对进行签名。

(重点是我的,来源:见上面的链接)

此定义阐明了有关服务器应用程序如何验证令牌的确切问题。在JWT的情况下,它通过检查相关的数字签名是否有效来实现;它实际上不仅仅是检查签名,但这是最重要的一步。

  

数字签名:用于确定数字讯息或一组文件是否为真品的加密方法,在传输过程中未被更改或篡改,并且来自已知发件人。

(来源:Auth0 Identity Glossary

您可以通过应用不同的算法对某些内容进行数字签名,但此过程可以在非常高的级别描述,包括以下内容:

  • 选择只有您(您的服务器)才能知道的秘密。
  • 将要签名的秘密和数据传递给给定的算法。

输出将包含一个签名,如果某些数据与最初生成签名的数据完全相同,则该签名随后可用于检查(如果您也知道该秘密)。

总之,服务器生成一个JWT,它被签名,分发到任何客户端应用程序和只要服务器确保用于签名的秘密是其他任何人都知道的它可以确保收到的代币没有被篡改,事实上是由一个可信赖的政党发布的。

如前所述,除了检查签名之外,服务器还可以进行进一步的验证,通常它至少也会验证令牌在生命周期内仍然有效。建议这样做,因为此身份验证过程完全依赖于拥有令牌(通常称为承载令牌),这意味着如果攻击者能够获取令牌,则只能在配置的生命周期内使用它。推导出的建议是持有人令牌的生命周期也应该相对较短。

相关问题