4

我有这个使用 BEARER TOKEN 身份验证的 ASP.NET web SPA web api 项目。

我已经将它部署到几个不同的地方,本地和天蓝色的云,我没有看到这个问题。

由于预算原因,我决定从托管公司 (winhost) 购买。当站点仅从该主机运行时,我只看到以下问题。

问题是在您登录站点并闲置 X 分钟后,下一个请求将失败,直到您刷新并登录。(我得到一个 401(未经授权))

令牌的到期时间似乎只有 10-20 分钟而不是 2 周(默认情况下适用于 azure 和我的本地视觉工作室)。收到时我也打印了令牌,现在是 2 周。

我期望的行为是要缓存的不记名令牌(我已通过记录标头确认),然后与下一个请求一起发送,然后被授权并返回结果。

这个新主机有一些我认为破坏它的默认 IIS 设置。我已经不得不更改一些默认设置,例如通过 IIS 管理器手动关闭基本身份验证。

有任何想法吗?

我唯一能找到与我所看到的描述相匹配的是这个链接。 ASP.NET Web API 授权令牌提前到期

我会对该帖子发表评论,但我没有足够高的声誉点。为方便起见,我在下面复制了该帖子。

如此处所述,我已经为我的 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 的移动应用程序的用户不时重新登录。任何帮助,将不胜感激。

谢谢。

4

2 回答 2

0

在 IIS 中,可以在应用程序级别设置机器密钥,每次应用程序池回收时都会生成一个新的机器密钥,因此您需要一个新的令牌

于 2015-03-19T10:01:51.510 回答
0

在这里回答

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

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

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

于 2015-11-30T04:47:42.380 回答