0

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

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

约束:我不能使用会话。

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

4

2 回答 2

2

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

生成令牌的一般步骤是:

  1. 创建结构化数据包括 {id: GUID, exp: time}
  2. 将其序列化为字符串 (JSON.net)
  3. 加密数据(机器密钥/Dpapi 加密)
  4. 编码数据(Base64)

接收令牌的步骤与上述步骤相反。

获取服务器代码的过期时间后,您可以确定是否需要刷新令牌。上面的过程实际上就是 ASP.NET 中 cookie 身份验证所做的。

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

顺便说一句,Owin OAuth 中间件已经支持 oauth bearer token。我有一个关于它如何在 SPA 模板中工作的博客。您可以考虑使用它而不是自己发明。谢谢。

[更新] 我刚刚上传了另一个示例项目,它在不遵循 OAuth 2.0 流程的情况下简化了不记名令牌身份验证。

于 2013-10-21T23:16:00.250 回答
1

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

于 2013-10-21T20:23:58.170 回答