ASP.NET Web API 授权令牌提前到期
ASP.NET Web API Authorization tokens expiring early
我已经按照 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 分钟后,当我尝试通过授权访问 "get" 或 "post" 或我的 API 中的任何方法时:header 中的不记名令牌如:
Authorization: Bearer qwertyuiop.....
我收到这个错误:
{"Message":"Authorization has been denied for this request."}
虽然只有 5 分钟,令牌应该持续 15 天,但它会在 5 分钟内过期。
当我在 5 分钟的间隔内请求任何方法 "get"/"post" 时,我在 JSON 中得到了正确的数据响应。总之,授权成功。
我通过 Fiddler、Chrome 的 REST 插件和使用 API.
的移动应用程序对其进行了测试,从而重复了此行为
我有 web.config 的 session 值如下(我认为它相关)
<sessionState timeout="180" />
请注意,未使用表单身份验证,因此 web.config 中的该部分没有必要超时。
知道发生了什么事吗?此超时导致使用 API 的移动应用程序用户时不时地使用 re-login。任何帮助将不胜感激。
谢谢。
检查WebServer,在IIS中可以在应用程序级别设置Machine Key,每次应用程序池回收时都会生成一个新的Machine Key,因此您需要一个新的令牌。您可以在网站级别或根服务器级别设置机器密钥。也许这会有所帮助
添加到web.config不受应用程序池回收影响
<system.web>
<machineKey validationKey="21F090935F6E49C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B"
decryptionKey="261F793EB53B761503AC445E0CA28DA44AA9B3CF06263B77"
validation="SHA1"/>
尝试将空闲 Time-out(分钟)设置为超过 5 minutes.You 可以在
下找到此选项
iis application pool->advanced settings
我已经按照 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 分钟后,当我尝试通过授权访问 "get" 或 "post" 或我的 API 中的任何方法时:header 中的不记名令牌如:
Authorization: Bearer qwertyuiop.....
我收到这个错误:
{"Message":"Authorization has been denied for this request."}
虽然只有 5 分钟,令牌应该持续 15 天,但它会在 5 分钟内过期。 当我在 5 分钟的间隔内请求任何方法 "get"/"post" 时,我在 JSON 中得到了正确的数据响应。总之,授权成功。
我通过 Fiddler、Chrome 的 REST 插件和使用 API.
的移动应用程序对其进行了测试,从而重复了此行为我有 web.config 的 session 值如下(我认为它相关)
<sessionState timeout="180" />
请注意,未使用表单身份验证,因此 web.config 中的该部分没有必要超时。
知道发生了什么事吗?此超时导致使用 API 的移动应用程序用户时不时地使用 re-login。任何帮助将不胜感激。
谢谢。
检查WebServer,在IIS中可以在应用程序级别设置Machine Key,每次应用程序池回收时都会生成一个新的Machine Key,因此您需要一个新的令牌。您可以在网站级别或根服务器级别设置机器密钥。也许这会有所帮助
添加到web.config不受应用程序池回收影响
<system.web>
<machineKey validationKey="21F090935F6E49C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B"
decryptionKey="261F793EB53B761503AC445E0CA28DA44AA9B3CF06263B77"
validation="SHA1"/>
尝试将空闲 Time-out(分钟)设置为超过 5 minutes.You 可以在
下找到此选项 iis application pool->advanced settings