标头上的Web API令牌 - 如何设置30分钟到期

时间:2013-10-21 20:07:34

标签: c# asp.net-web-api http-headers

假设我有一个WebAPI,它在Login调用的Header上返回一个安全令牌(GUID)。

理想情况下,我们希望在30分钟内接听更多电话,每次收到电话时,我们都需要更改令牌以再获得30分钟。

约束: 我不能使用Session。

在WebAPI环境中为特定Header值设置过期的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

您可以将令牌更改为结构化数据,而不是发送GUID。例如:JWT

生成令牌的一般步骤是:

  1. 创建包含{id:GUID,exp:time}
  2. 的结构化数据
  3. 将其序列化为字符串(JSON.net)
  4. 加密数据(机器密钥/ Dpapi加密)
  5. 对数据进行编码(Base64)
  6. 接收令牌的步骤恰好与上述步骤相反。

    在服务器代码上获得到期时间后,您可以确定是否需要刷新令牌。上面的过程实际上是cookie验证在ASP.NET中的作用。

    对于基于令牌头的身份验证,最好遵循OAuth 2.0规范以使用刷新令牌来延长令牌过期时间。

    BTW,Owin OAuth middleware已经支持oauth bearer token。我有一个关于它如何在SPA模板中工作的blog。您可以考虑使用它而不是发明自己的。感谢。

    [更新] 我刚刚上传了another sample project,它简化了不记名代币身份验证,而没有遵循OAuth 2.0流程。

答案 1 :(得分:1)

我不认为您选择了正确的解决方案/方法。 在适当的时间刷新令牌是一项消费者工作(一旦令牌过期) 我建议构建一个单独的STS服务,向消费者发放令牌,然后将此令牌发送到Web API Web服务(在标头中)。 Web API服务验证令牌是否使用正确的密钥进行签名,如果是这种情况,则允许获取数据。