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

Posted

技术标签:

【中文标题】ASP.NET Web API 授权令牌提前到期【英文标题】:ASP.NET Web API Authorization tokens expiring early 【发布时间】:2015-04-13 09:18:53 【问题描述】:

如here 所述,我已为我的 Web 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 分钟,当我尝试通过传递授权访问“get”或“post”或我的 API 中的任何方法时:标头中的不记名令牌为:

Authorization: Bearer qwertyuiop.....

我收到此错误:

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

虽然只有 5 分钟,并且令牌应该持续 15 天,但它会在 5 分钟内到期。 当我在 5 分钟的间隔内请求任何方法“get”/“post”时,我的 JSON 数据得到了正确的响应。总之,授权成功。

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

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

<sessionState timeout="180" />

请注意,不使用表单身份验证,因此 web.config 中该部分的超时是不必要的。

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

谢谢。

【问题讨论】:

我也有同样的问题!!有什么帮助吗? 添加机器密钥就可以了。 why_not 在下面也提到过。如何将Why_not 的帖子标记为答案? 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

下找到此选项
 iis application pool->advanced settings

【讨论】:

以上是关于ASP.NET Web API 授权令牌提前到期的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Web API 和 OpenID Connect:如何从授权码中获取访问令牌

没有 OWIN 和 AspNet.Identity 的基于 Asp.Net Web Api 令牌的授权

Asp.Net Core Identity 未正确验证令牌到期 [重复]

了解 ASP.NET(MVC、Web API)中的令牌生成/验证

如何保护 ASP.NET Core Web API 免受被盗 JWT 令牌以进行模拟

如何使用 Web Api Asp.Net Core 实现基于声明的授权?