ASP.NET Web API授权令牌提前到期

时间:2015-02-12 15:04:22

标签: asp.net-mvc-4 authorization asp.net-web-api2 bearer-token

我已按照here所述为我的网络API(个人帐户)实施了安全性。

我在godaddy(共享主机)上托管了该网站,并且其工作正常。 当我使用url" domain.com/token"请求令牌时,我会获得有效期为15天的令牌。我已将此设置为" StartupAuth.cs"使用

AccessTokenExpireTimeSpan = TimeSpan.FromDays(15)

例如:

{
  "access_token":"qwertyuiop.....",
  "token_type":"bearer",
  "expires_in":1209599, 
  "userName":"user@example.com",
  ".issued":"Wed, 11 Feb 2015 01:00:00 GMT",
  ".expires":"Thu, 26 Feb 2015 01:00:00 GMT"
}

(我将值放在上面的代码中,但是您可以了解" .expires"字段。

获得令牌后5分钟,当我尝试访问"得到"或"发布"或通过授权传递我的API中的任何方法:标头中的承载令牌为:

Authorization: Bearer qwertyuiop.....

我收到此错误:

{"Message":"Authorization has been denied for this request."}

虽然它只是5分钟而且令牌应该持续15天,但它会在5分钟内到期。 当我要求任何方法"得到" /"发布"在5分钟的间隔内,我通过JSON中的数据获得了正确的响应。简而言之,授权成功。

我通过Fiddler,Chrome的REST插件以及使用API​​的移动应用程序对其进行了测试,从而重复了这种行为。

我的会话的web.config值如下(我认为它相关)

<sessionState timeout="180" />

请注意,不使用表单身份验证,因此不需要在web.config中对该部分进行超时。

知道发生了什么事吗?此超时导致使用API​​的移动应用程序的用户不时地重新登录。任何帮助将不胜感激。

感谢。

3 个答案:

答案 0 :(得分:8)

检查WebServer,在IIS中,可以在应用程序级别设置机器密钥,每次应用程序池回收时都会生成新的机器密钥,因此您需要一个新的令牌。您可以在网站级别或根服务器级别上设置计算机密钥。也许这可能会有所帮助

答案 1 :(得分:8)

添加到web.config不受应用程序池回收的影响

<system.web>
   <machineKey validationKey="21F090935F6E49C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B"
            decryptionKey="261F793EB53B761503AC445E0CA28DA44AA9B3CF06263B77"
            validation="SHA1"/>

请在此处阅读如何生成https://support.microsoft.com/en-us/kb/312906

答案 2 :(得分:-1)

尝试将空闲超时(分钟)设置为超过5分钟。您可以在

下找到此选项
{{1}}