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

jam*_*mes 4 rest owin asp.net-web-api2

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

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

更新:

好的,我可以看到声明存储在令牌中。那么在某种程度上,服务器仍在身份验证过程中与数据库进行检查是否正确?否则,我们假设我是服务器,并且我能够解密该对象的令牌:

{
  "iss": "thesite.com",
  "exp": 1300819380,
  "name": "Chris Sevilleja",
  "admin": true
}
Run Code Online (Sandbox Code Playgroud)

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

rav*_*dra 5

JWT 令牌由三部分组成,以点(.)分隔。

  1. 第一部分是标题。
  2. 第二部分是有效负载
  3. 第三部分是签名(比如 s0JWT 格式
  4. 签名是使用标头和有效负载创建的。

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

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