5

मैं अपने पहचान सर्वर 3 ग्राहकों में से एक के लिए प्राधिकरण कोड प्रवाह का उपयोग कर रहा है अपने समयावधि समाप्त होने के ग्राहक विन्यास में सेट से पहले समाप्त हो रहा है और यह इस प्रकार कॉन्फ़िगर किया गया है:पहचान सर्वर 3 ताज़ा टोकन

ClientId = "tripgalleryauthcode", 
ClientName = "Trip Gallery", 
Flow = Flows.AuthorizationCode, 
AllowAccessToAllScopes = true, 
RequireConsent = false, 

// redirect = URI of our callback controller in the IOS application 
RedirectUris = new List<string> 
{ 
    "somecallbackuri" 
},   

ClientSecrets = new List<Secret>() 
{ 
    "somesecret" 
}, 

// refresh token options 
AccessTokenType = AccessTokenType.Jwt, 
AccessTokenLifetime = 120, 
RefreshTokenUsage = TokenUsage.OneTimeOnly, 
RefreshTokenExpiration = TokenExpiration.Absolute, 
AbsoluteRefreshTokenLifetime = 360, 

आप देख सकते हैं , यह 2 मिनट में एक्सेस टोकन की समाप्ति और 6 मिनट में रीफ्रेश टोकन को समाप्त करने के लिए कॉन्फ़िगर किया गया है। मैंने ऐसा इसलिए किया क्योंकि मैं उत्पादन में उपयोग किए जाने वाले एक के बजाय छोटी समय सीमा में समस्या को डीबग करने का प्रयास करना चाहता था: टोकन रीफ्रेश करने के लिए 15 दिन, टोकन तक पहुंचने के लिए 1 घंटा। हमने देखा कि किसी कारण से, आज जारी किए गए टोकन को रीफ्रेश करना कल काम नहीं करता है।

  1. 1:05 PM पर पर मैं एक ताज़ा टोकन का अनुरोध किया है और नई refres और आप पहुंच टोकन प्राप्त
  2. अब मैं अपने ताज़ा टोकन उम्मीद: यही कारण है कि मैं कई बार कमी करने का फैसला किया है और इस में क्या हुआ है 01:11
  3. पर समाप्त करने के लिए पर 1:10 मैं नए पहुँच जाते हैं और टोकन ताज़ा करने के लिए कोशिश कर रहा refresh_token अनुदान प्रकार का उपयोग कर टोकन अंत बिंदु करने के लिए फोन करना। क्या होता है कि मुझे HTTP 400 त्रुटि मिलती है यह कह रही है कि यह अवैध_ग्रेंट है।

मैंने कुछ और देखा है। क्या होता है कि पहुंच टोकन समाप्ति के 2 मिनट बाद मुझे 400 त्रुटि मिलती है। यह कहता है ताज़ा टोकन अमान्य है।

यह पहचान सर्वर से लॉग है।

w3wp.exe Information: 0 : 2016-11-23 10:56:15.802 +00:00 [Information] Start token request 
w3wp.exe Information: 0 : 2016-11-23 10:56:15.802 +00:00 [Information] Client secret id found: "tripgalleryauthcode" 
w3wp.exe Information: 0 : 2016-11-23 10:56:15.802 +00:00 [Information] Client validation success 
w3wp.exe Information: 0 : 2016-11-23 10:56:15.802 +00:00 [Information] Start token request validation 
w3wp.exe Information: 0 : 2016-11-23 10:56:15.802 +00:00 [Information] Start validation of refresh token request 
w3wp.exe Warning: 0 : 2016-11-23 10:56:15.802 +00:00 [Warning] "Refresh token has expired" 
"{ 
    \"ClientId\": \"tripgalleryauthcode\", 
    \"ClientName\": \"Trip Gallery\", 
    \"GrantType\": \"refresh_token\", 
    \"RefreshToken\": \"d12f50289e5cded13082de989a64ac01\", 
    \"Raw\": { 
    \"grant_type\": \"refresh_token\", 
    \"refresh_token\": \"d12f50289e5cded13082de989a64ac01\" 
    } 
}" 
w3wp.exe Information: 0 : 2016-11-23 10:56:15.818 +00:00 [Information] End token request 
w3wp.exe Information: 0 : 2016-11-23 10:56:15.818 +00:00 [Information] Returning error: invalid_grant 

मैं वास्तव में जानना चाहता हूं कि उस व्यवहार का कारण क्या है और मेरी समाप्ति टोकन की समयसीमा समाप्त होने का कारण क्या है।

उत्तर

1

ऐसा क्यों होता है क्योंकि जेडब्ल्यूटी में निर्मित एक घड़ी की स्कीव सुविधा है जो आपको सिंक घड़ियों से बाहर रखती है। इसके बिना आप उन समस्याओं में भाग ले सकते हैं जहां टोकन अभी तक मान्य नहीं हैं।

इसके लिए डिफ़ॉल्ट मान 5 मिनट है - यह access_token के साथ-साथ refresh_token को प्रभावित करता है।

आप IdentityServer4.AccessTokenValidation.CombinedAuthenticationOptions

में JwtBearerOptions.TokenValidationParameters.ClockSkew के साथ इस मूल्य बदल सकते हैं, यह व्यवहार भी official JWT Draft में निर्दिष्ट किया जाता:

Implementers कुछ छोटे छूट के लिए आम तौर पर की तुलना में अधिक नहीं कुछ ही मिनटों के उपलब्ध करा सकता है, घड़ी के लिए खाते के लिए खाते हैं। इसका मान एक संख्या होना चाहिए जिसमें IntDate मान हो। यह दावा वैकल्पिक है।

+0

कृपया, इस विषय को देखें http://stackoverflow.com/questions/43249912/identity-server-by-leastprivilege-doesnt-work-properly-on-azure – user2128702

संबंधित मुद्दे