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

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

问题描述:

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

  1. 用户请求访问使用用户名/密码
  2. 应用验证凭据
  3. 应用提供了一个签名令牌给客户
  4. 客户端存储该令牌,并与每个请求一起发送它
  5. 服务器验证令牌并回复数据

但是,步骤5具体如何发生?

+0

由于服务器首先提供了令牌,因此它已经知道该令牌是否有效以及它属于谁。 –

+0

如何?服务器是否将其存储在某个位置,然后比较每个请求上的令牌? –

+0

当然,这是整个观点。 –

基于令牌的验证术语可以是在一些情况下使用,所以答案总是取决于确切的问题。你用JWT标记了你的问题(JSON Web Tokens),所以我会根据这个标记画出一些假设来回答这个问题。

JSON网络令牌(JWT)是一个开放标准(RFC 7519),它定义用于安全地发送各方之间的信息作为JSON对象紧凑且自包含方式。此信息可以验证和信任,因为它是数字签名。可以使用秘密(使用HMAC算法)或使用RSA的公钥/私钥对对JWT进行签名。

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

这个定义带来了曙光你的具体问题上的服务器应用程序如何验证令牌。它在JWT的情况下通过检查相关的数字签名是否有效来做到这一点;它实际上不仅仅是检查签名,而且这是最重要的一步。

数字签名:为确定是否没有数字信息或一组文件是否为正版,并没有被更改或在运输过程中被篡改,并且来自已知发件人的加密方法。

(来源:Auth0 Identity Glossary

可以利用数字技术通过施加不同的算法签署的东西,但该过程可以以非常高的级别来描述由以下内容组成:

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

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

最后一个服务器产生一个签署了智威汤逊,分发到任何客户端应用程序和只要服务器确保用于签署已知的是,没有人它可以确保接收到的令牌不是秘密篡改并实际上由可信任的一方发布。

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

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