2017-03-10 113 views
1

我使用瀏覽器(Xamarin webview;最初登錄並獲取1小時後過期的訪問令牌)和httpclient(訪問我的webapi端點)的混合。當令牌到期時,我使用/ client/authorize終端使用httpclient(從webview複製的cookie)請求一個新的獲取新的訪問令牌。使用IdentityServer3滑動過期會話cookie

只要餅乾沒有過期,這種方法就行了。

我已經設置了身份服務器在認證Cookie(CookieOptions:ExpireTimeSpan/SlidingExpiration)上有1天的滑動過期。我認爲這會導致(除了獲得一個新的有效令牌)在每次向認證端點發送請求時收到新的cookie時,都會使我登錄。問題在於,使用使用webview。因此,無論我訪問授權端點多少次,我仍然在一天之後退出,並且無法再從身份驗證端點獲取新令牌。

假設我沒有完全採取錯誤的做法,什麼請求應該讓我更新cookies(IdSvr?IdSvr.Session?我仍然需要嗎?),並且有新的到期日期,所以我仍然登錄到IdentityServer?

注意:我確實看過刷新標記,但這些標記不適用於隱式流。我認爲我需要隱式流程,因爲我不應該在分佈式Xamarin應用程序中保存客戶機密。使用cookie似乎是最好的選擇。

回答

4

注意自我(和其他人):身份驗證Cookie是重要的。記錄:這是idsrv cookie。

然後在測試過程中讓我感到困惑:調用/ authorize端點只會在至少過了一半的過期時間時纔會返回一個新的授權(idsrv)cookie。

這讓我吃驚了一下,因爲這將意味着:

  • 8:00登錄滑動的4個小時EXP(到期時間:12:00)
  • 9:59請求/授權端點(預計新的到期時間:13:59)
  • 12:01請求/授權再次

的12:01請求將慘遭失敗,因爲9:59呼叫沒有得到我的更新餅乾...

如果兩分鐘後在10:01發出第二個請求,我會得到一個更新的cookie,其過期時間爲14:01。

結論:當過期時間的一半已過時,滑動過期似乎只是滑動。

+0

我剛剛對此進行了測試,在撰寫本文時,這仍然是最新版本的Identity Server 3樣本。我想知道它是否被破壞,直到我讀到你的答案。 – Barrie

+1

這與ASP.NET窗體身份驗證的行爲相匹配。 「如果在過期時間的一半之前訪問網頁,則不會重置票證到期時間。」 https://support.microsoft.com/en-us/help/910443/understanding-the-forms-authentication-ticket-and-cookie –