2016-10-19 8 views
7

मैं AspNet.Security.OpenIdConnect.Server का उपयोग कर रहा हूं जेडब्ल्यूटी टोकन जारी करने के लिए और प्रमाणीकरणकोड लाइफटाइम परीक्षण के लिए 30 सेकंड तक सेट है।टोकन के 5 मिनट बाद समाप्त होने के बाद मेरे जेडब्ल्यूटी बीयर प्रमाणीकरण टोकन को पहचानने का समय क्यों है?

"expires_in": 30, 

और deserialized टोकन निम्नलिखित दावे हैं:

"nbf": 1476915220, 
"exp": 1476915250, 
"iat": 1476915220, 

के रूप में यहाँ कोड का स्निपेट मैं विकल्पों

 options.TokenEndpointPath = "/api/token"; 
     options.AllowInsecureHttp = true; 
     options.AccessTokenHandler = new JwtSecurityTokenHandler(); 
     options.SigningCredentials.Add(new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256)); 
     options.AccessTokenLifetime = TimeSpan.FromSeconds(30); 
     options.AuthorizationCodeLifetime = TimeSpan.FromSeconds(30); 

लौटे टोकन शामिल है स्थापित करने के लिए उपयोग कर रहा हूँ है आप देख सकते हैं, exp (समाप्ति समय) iat (समस्या समय) के बाद 30 सेकंड है। फिर भी, टोकन समाप्त होने के 5 मिनट बाद तक 401 अनधिकृत ट्रिगर नहीं कर रहा है। अगर हम http://www.epochconverter.com/ में एक्सप नंबर प्लग करते हैं तो हम देखेंगे कि यह बुध, 1 9 अक्टूबर 2016 22:14:10 जीएमटी का मूल्यांकन करता है जो मेरे स्थानीय समय में 5:14:10 बजे है।

Microsoft.IdentityModel.Tokens.SecurityTokenExpiredException: IDX10223: Lifetime validation failed. The token is expired. 
ValidTo: '10/19/2016 22:14:10' 
Current time: '10/19/2016 22:19:10'. 
    at Microsoft.IdentityModel.Tokens.Validators.ValidateLifetime(Nullable`1 notBefore, Nullable`1 expires, SecurityToken securityToken, TokenValidationParameters validationParameters) 
    at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateLifetime(Nullable`1 notBefore, Nullable`1 expires, JwtSecurityToken securityToken, TokenValidationParameters validationParameters) 
    at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateToken(String token, TokenValidationParameters validationParameters, SecurityToken& validatedToken) 
    at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.<HandleAuthenticateAsync>d__1.MoveNext() 
info: Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerMiddleware[7] 
     Bearer was not authenticated. Failure message: IDX10223: Lifetime validation failed. The token is expired. 
ValidTo: '10/19/2016 22:14:10' 
Current time: '10/19/2016 22:19:10'. 
बेशक

, इस उत्पादन साबित नहीं होता है कि सर्वर 22:14:10 और 22:19:10 के बीच टोकन को स्वीकार किया गया था:

यहाँ कोर लाइब्रेरी से कुछ लॉग इन उत्पादन होता है। यह वही होता जो मैंने समाप्त होने के 5 मिनट बाद इंतजार किया था और फिर टोकन को सत्यापित करने का प्रयास किया था, लेकिन आपको इसके लिए अपना शब्द लेना होगा। मैं पोस्टमैन में परीक्षण कर रहा था और जब तक यह 401 वापस नहीं आया, तब तक "भेजें" पर क्लिक कर रहा था।

तो, क्या हो रहा है? क्या इसमें 5 मिनट का बफर बनाया गया है, मुझे पता नहीं है? दिलचस्प बात यह है कि AccessTokenLifetime के लिए डिफ़ॉल्ट मान 5 मिनट है, लेकिन टोकन निश्चित रूप से प्रतिबिंबित कर रहा है कि मैंने इसे 30 सेकंड में बदल दिया है। क्या चल रहा है?

प्रासंगिक पुस्तकालयों मैं उपयोग कर रहा हूँ:

<package id="AspNet.Security.OpenIdConnect.Extensions" version="1.0.0-beta6-final" targetFramework="net452" /> 
<package id="AspNet.Security.OpenIdConnect.Server" version="1.0.0-beta6-final" targetFramework="net452" /> 
<package id="Microsoft.AspNetCore.Authentication.JwtBearer" version="1.0.0" targetFramework="net452" /> 
+0

बस एक ही समस्या में भाग गया, एक अच्छा और सरल उत्तर के साथ, यहां एक प्रश्न पोस्ट करने से पहले उत्कृष्ट जांच करना चाहिए :-) ठीक है! –

उत्तर

12

तो, क्या हो रहा है? क्या इसमें 5 मिनट का बफर बनाया गया है, मुझे पता नहीं है? क्या चल रहा है?

आप क्या कहते हैं "बफ़र" वास्तव में है एक अंतर्निहित जेडब्ल्यूटी वाहक मिडलवेयर (माइक्रोसॉफ्ट द्वारा विकसित) द्वारा की पेशकश की सुविधा है जो "के रूप में घड़ी तिरछा" में जाना जाता है और वेब में घड़ी desynchronization के प्रभावों को कम करने के लिए डिजाइन किया गया था खेतों।

जैसा कि आपने पाया, the default value is set to 5 minutes, लेकिन इसे JwtBearerOptions.TokenValidationParameters.ClockSkew के माध्यम से बदला जा सकता है।

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