Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# winhost上未记住ASP.NET SPA WEBAPI承载令牌_C#_Asp.net_Asp.net Web Api_Bearer Token - Fatal编程技术网

C# winhost上未记住ASP.NET SPA WEBAPI承载令牌

C# winhost上未记住ASP.NET SPA WEBAPI承载令牌,c#,asp.net,asp.net-web-api,bearer-token,C#,Asp.net,Asp.net Web Api,Bearer Token,我有一个ASP.NET web SPA web api项目,它使用承载令牌身份验证 我已经将它部署到了两个不同的地方,本地和azure云,我没有看到这个问题 由于预算原因,我决定从一家主机公司(winhost)购买。当站点仅从此主机运行时,我只看到以下问题 问题是,在您登录站点并空闲X分钟后,下一个请求将失败,直到您刷新并登录。(我拿到了401(未经授权)) 令牌的过期时间似乎只有10-20分钟,而不是2周(在azure和my visual studio local上默认有效)。我也在收到代币时

我有一个ASP.NET web SPA web api项目,它使用承载令牌身份验证

我已经将它部署到了两个不同的地方,本地和azure云,我没有看到这个问题

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

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

令牌的过期时间似乎只有10-20分钟,而不是2周(在azure和my visual studio local上默认有效)。我也在收到代币时打印了代币,时间是2周

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

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

有什么想法吗

我能找到的唯一与我所看到的描述相匹配的东西就是这个链接。

我当然会对那篇文章发表评论,但我没有足够高的声望。为了方便起见,我把那篇文章抄到了下面

如前所述,我已经为我的web api(个人帐户)实现了安全性

我已经在godaddy(共享主机)上托管了该网站,并且工作正常。 当我使用url“domain.com/token”请求令牌时,我得到了到期日期为15天内的令牌。我在“StartupAuth.cs”中使用

e、 g:

{
  "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分钟,当我尝试通过在标头中传递authorization:bearer令牌访问API中的“get”或“post”或任何方法时,如下所示:

Authorization: Bearer qwertyuiop.....
我得到这个错误:

{"Message":"Authorization has been denied for this request."}
虽然它只有5分钟,令牌应该可以使用15天,但它在5分钟内到期。 当我在5分钟的时间间隔内请求任何方法“get”/“post”时,我会用JSON格式的数据得到正确的响应。简言之,授权成功

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

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


请注意,未使用表单身份验证,因此不需要在web.config中的该节上超时

知道发生了什么吗?这个超时会导致使用API的移动应用的用户时不时地重新登录。如果有任何帮助,我们将不胜感激


谢谢。

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

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

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

阅读这里如何生成

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