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

时间:2017-03-02 04:29:06

标签: rest asp.net-web-api2 owin

所以我只是在使用OWIN的Web API应用程序中实现基于令牌的身份验证,我能够理解它的工作原理(至少在表面上)。

我无法理解的是服务器如何验证生成的承载令牌而不将其存储在磁盘或内存中。我的意思是确定到期日期可能在令牌本身中加密,但只有在它已经过期时才适用。那么服务器是如何做到的(在高层次上)?

更新

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

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

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

2 个答案:

答案 0 :(得分:2)

JWT令牌由三个部分组成,用点(。)分隔。

  1. 第一部分是Header。
  2. 第二部分是Payload
  3. 第三部分是签名(比如s0 JWT Format
  4. 使用标头和有效负载创建签名。
  5. 当服务器收到JWT令牌时,它会从传入的头和有效负载创建临时签名(比如s1)。

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

答案 1 :(得分:0)

令牌使用JWT格式(JSON Web令牌)进行编码。这在标准(https://tools.ietf.org/html/rfc7519)中有详细描述,您将看到该令牌包含一定数量的声明,其中包括截止日期(exp)。