Asp.net-Mvc-4

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

  • June 4, 2018

如此處所述,我已經為我的 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"/>

在此處閱讀如何生成https://support.microsoft.com/en-us/kb/312906

引用自:https://stackoverflow.com/questions/28480848