Asp.net-Mvc-4
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 的移動應用程序的使用者不時重新登錄。任何幫助,將不勝感激。
謝謝。
檢查 WebServer,在 IIS 中,可以在應用程序級別設置機器密鑰,每次應用程序池回收時都會生成一個新的機器密鑰,因此您需要一個新的令牌。您可以在網站級別或根伺服器級別設置機器密鑰。也許這可能會有所幫助
添加到 web.config 以不受應用程序池回收的影響
<system.web> <machineKey validationKey="21F090935F6E49C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B" decryptionKey="261F793EB53B761503AC445E0CA28DA44AA9B3CF06263B77" validation="SHA1"/>