服务器如何知道不记名令牌是否有效而不将其存储在磁盘或内存中

How Does The Server Know If A Bearer Token Is Valid Without Storing It On Disk Or Memory

所以我刚刚使用 OWIN 在 Web API 应用程序中实现了基于令牌的身份验证,并且我能够理解它如何工作的概念(至少在表面上是这样)。

我无法理解的是服务器如何验证生成的不记名令牌而不将其存储在磁盘或内存中。我的意思是确保到期日期可能在令牌本身中加密,但这仅适用于已经过期的情况。那么服务器是如何做到的(在高层次上)?

更新:

好的,我可以看到声明存储在 token.So 中,在某种程度上,服务器仍在身份验证期间使用数据库检查是否正确?否则让我们假设我是服务器并且我能够将令牌解密到这个对象:

{
  "iss": "thesite.com",
  "exp": 1300819380,
  "name": "Chris Sevilleja",
  "admin": true
}

所以现在的问题是我(服务器)能够将令牌解密为键值对(检查是否存在特定键,如 'iss'、'exp' 和检查 'admin' 键等值必须为真)意味着我将授权 Web 请求?

令牌使用 JWT 格式编码(JSON Web 令牌)。这在标准中有很好的描述(https://www.rfc-editor.org/rfc/rfc7519),你会看到令牌包含一定数量的声明,其中包括到期日期(exp)。

JWT token 由三部分组成,中间用点(.)分隔。

  1. 第一部分是Header。
  2. 第二部分是有效载荷
  3. 第三部分是签名(说s0JWT Format
  4. 签名是使用 Header 和有效负载创建的。

当服务器收到 JWT 令牌时,它会根据传入的 header 和有效负载创建临时签名(比如 s1)。

  • 如果 s0 和 s1 签名相同则令牌有效。
  • 令牌还包含用于验证令牌的声明。例如 exp 声明包含 unix 纪元时间,在此之后令牌被视为无效。