0

我在Azure中託管爲WebApp的Thinktecture身份服務器v3的實例。一般來說,它的工作方式與預期的一樣,但我有一些問題試圖通過令牌身份/連接/令牌端點與refresh_token授權類型使用刷新令牌。我有一個使用授權碼流的客戶端,這是關係到有關此客戶端刷新令牌選項的設置:在Azure中部署身份驗證服務器3刷新令牌問題

// refresh token options 
AccessTokenType = AccessTokenType.Jwt, 
AccessTokenLifetime = 3600, 
RefreshTokenUsage = TokenUsage.OneTimeOnly, // Every time generates new refresh token. Not only access token. 
RefreshTokenExpiration = TokenExpiration.Sliding, 
SlidingRefreshTokenLifetime = 1296000 

對於誰與此工作過的人很清楚,我用JWT令牌和我的訪問令牌有效期爲1小時,之後無需在Identity Server上再次登錄,我可以使用刷新令牌並獲取新的訪問權限和刷新令牌。我的刷新令牌必須有效15天(1296000秒)。實際發生的是它不能按預期工作。出於某種原因,當我決定打電話給我的REST API(Identity Server的依賴方)時,在前一個小時之後的一個半小時,我得到了invalid_grant響應。

我決定對它進行一點測試,並使我的訪問令牌在2分鐘內過期,我的刷新令牌爲10次。然後,我嘗試在訪問令牌後1,2,3分鐘撥打電話已經過期,並且按預期工作。我真的不想用1小時的訪問令牌進行這種測試,所以我決定在這裏問一下是否有人曾經這樣做過。

回答

0

您的接入令牌終身爲1小時,刷新令牌終身爲15天。

您在調用API時使用的令牌是訪問令牌。如果您在最後一次刷新訪問令牌後90分鐘撥打電話,則會出現錯誤,這對我來說很正常。在這種情況下,在調用API之前,您應該檢查訪問令牌是否仍然有效,如果不是,則刷新它。

至於你的測試,下了堆棧JwtSecurityTokenHandler類負責驗證令牌。默認情況下,驗證參數允許mismatch of 5 minutes適應系統之間的時間差異。將TokenValidationParameters.DefaultClockSkew修改爲較小的值應該有助於您的情況。

+0

當我的訪問令牌過期時,我知道客戶端。這就是爲什麼我使用我的刷新令牌來接收新訪問令牌並使用它。我調用刷新令牌端點,但由於某種原因,此方法在某個時間停止工作。 – user2128702

+0

什麼停止工作?使用當前的刷新標記在IdSrv上打開標記端點以獲取新的訪問標記和新的刷新標記?或者用你的訪問令牌打你的API? –

+0

是的,對標記端點的調用返回invalid_grant錯誤。它不再識別我的刷新標記。 – user2128702

相關問題