10

मैं पहचान सर्वर कॉन्फ़िगर किया गया:क्लाइंट कुकीज़ पर समाप्ति तिथि कैसे सेट करें?

public void Configuration(IAppBuilder app) 
{ 
    var factory = new IdentityServerServiceFactory().UseInMemoryClients(new Client[] { 
     new Client() 
     { 
      ClientName = "MyClient", 
      ClientId = "MyClientId", 
      Enabled = true, 
      Flow = Flows.Implicit, 
      RedirectUris = new List<string> { "MyClientServer/callback" }, 
     }; 
    }); 
} 

और क्लाइंट सर्वर:

public void Configuration(IAppBuilder app) 
{ 
    var cookieOptions = new CookieAuthenticationOptions(); 
    cookieOptions.AuthenticationType = "Cookies"; 
    app.UseCookieAuthentication(cookieOptions); 

    var authenticationOptions = new OpenIdConnectAuthenticationOptions() { 
     Authority = "https://MyIdentityServer/core", 
     ClientId = "MyClientId", 
     SignInAsAuthenticationType = "Cookies", 
     UseTokenLifetime = true, 
     RedirectUri = "MyClientServer/callback" 
    }); 

    app.UseOpenIdConnectAuthentication(authenticationOptions); 
} 

जब साथ "मुझे याद रखें" विकल्प पहचान कुकी समाप्त हो गया है तिथि उपयोगकर्ता लॉगिन:

idsvr.session expires 04 October ... 

लेकिन ग्राहक कुकी नहीं:

.AspNet.Cookies at end of session 

क्लाइंट कुकी के लिए एक ही समाप्ति तिथि सेट करने के लिए मुझे क्या करना चाहिए?

अद्यतन:

मैं क्लाइंट अनुप्रयोग में किसी भी समय समाप्ति तिथि निर्धारित कर सकते हैं:

authenticationOptions.Provider = new CookieAuthenticationProvider() 
{ 
    OnResponseSignIn = (context) => 
    { 
     var isPersistent = context.Properties.IsPersistent; 
     if (isPersistent) // Always false 
     { 
      context.CookieOptions.Expires = DateTime.UtcNow.AddDays(30); 
     } 
    } 
}; 

लेकिन मैं निर्धारित नहीं कर सकता जब समाप्ति की तारीख निर्धारित करने के लिए। इसे तभी सेट किया जाना चाहिए जब उपयोगकर्ता "मुझे याद रखें" का चयन करता है, लेकिन क्लाइंट पक्ष पर IsPersistent विकल्प हमेशा गलत होता है।

समस्या

भी आसान बॉयलरप्लेट परियोजना पर मौजूद है: https://identityserver.github.io/Documentation/docsv2/overview/mvcGettingStarted.html

UPDATE2:

मैं ग्राहक कुकी सफारी में बग की वजह से लगातार होने की जरूरत है - https://openradar.appspot.com/14408523

हो सकता है कि कुछ वैकल्पिक हल मौजूद है, तो मैं पहचान से ग्राहक से कॉलबैक में समाप्ति तिथि पारित कर सकता हूं?

Update3:

वास्तव में, हमारे पहचान और ग्राहक सर्वर app.server.local और id.server.local की तरह एक ही मूल डोमेन है। हो सकता है कि मैं अतिरिक्त कुकी के माध्यम से समाप्ति तिथि पास कर सकूं जो मूल डोमेन से संबंधित है (.server.local)? लेकिन मुझे नहीं पता कि यह पहचान पर कहां लिखा जा सकता है, और इसे क्लाइंट पर कहां लागू किया जा सकता है।

+1

डिबगिंग मदद लेने वाले प्रश्न ("** क्यों नहीं इस कोड काम कर रहा? ** है") यह पुन: पेश करने वांछित व्यवहार, एक * विशिष्ट समस्या या त्रुटि और कम से कम कोड आवश्यक * शामिल करना चाहिए ** में प्रश्न खुद **। ** बिना स्पष्ट समस्या कथन ** प्रश्न अन्य पाठकों के लिए उपयोगी नहीं हैं। देखें: [न्यूनतम, पूर्ण और सत्यापन योग्य उदाहरण कैसे बनाएं] (http://stackoverflow.com/help/mcve)। –

उत्तर

1

आपको कुकी ऑथ ईवेंट को संभालने की आवश्यकता है। ओपन आईडी मिडलवेयर सिर्फ ऑथ कुकी बनाता है, ताकि आप इन कुकीज के उन सभी पहलुओं को उन घटनाओं से संभाल सकें। आपको घटनाओं को देखने और थोड़ा परीक्षण और त्रुटि के साथ आपको कुकी जीवनकाल को प्रबंधित करने में सक्षम होना चाहिए।

+0

यदि उपयोगकर्ता "मुझे याद रखें" चेक करता है तो कौन सा ईवेंट मैं कुकी समाप्ति तिथि सेट कर सकता हूं? – Artem

2

एक IdentityServer और एक कुकी एक क्लाइंट अनुप्रयोग द्वारा जारी द्वारा जारी किए गए कुकी किसी भी तरह से जुड़े हुए नहीं हैं। क्लाइंट एप्लिकेशन में कुकीज पर पहचान सर्वर का कोई नियंत्रण नहीं है।

जब आप IdentityServer में प्रवेश करें, तो आप उस कुकी IdentityServer भीतर प्रमाणीकृत उपयोगकर्ता पटरियों जारी किए जाते हैं। यह हर ग्राहक आवेदन के लिए अपने क्रेडेंशियल्स में प्रवेश, एकल प्रवेश को सुविधाजनक बनाने से उपयोगकर्ता को बचाता है।

डिफ़ॉल्ट रूप से यह कुकी उस सत्र के लिए चलती है (इसलिए जब ब्राउज़र बंद हो जाता है तो यह समाप्त हो जाता है), अन्यथा यदि आप "मुझे याद रखें" सेट करते हैं तो यह सत्रों में, निश्चित दिनों के लिए टिकेगा।

पहचानकर्ता सर्वर से पहचान टोकन के सफल सत्यापन पर क्लाइंट एप्लिकेशन में एक कुकी जारी की जाएगी। इस कुकी में कोई समाप्ति समय, कोई नीति, कोई नाम हो सकता है। यह पूरी तरह से ग्राहक आवेदन द्वारा नियंत्रित है। आपके मामले में क्लाइंट कुकी समाप्ति आपके क्लाइंट एप्लिकेशन में CookieAuthenticationOptions में सेट की जा सकती है।

+0

हां, यह पूरी तरह से ग्राहक आवेदन द्वारा नियंत्रित है। लेकिन मुझे केवल समाप्ति तिथि सेट करने की आवश्यकता है जब पहचान सर्वर इसे सेट करता है। यदि पहचान सर्वर पक्ष पर IsPersistent ध्वज गलत है, तो क्लाइंट पक्ष को सत्र कुकी का उपयोग करना चाहिए। प्रश्न अद्यतन देखें। – Artem

+0

ऐसा करने के लिए कोई तंत्र नहीं है। यह एक कस्टम कार्यान्वयन होना चाहिए, कल्पना से बाहर। जिज्ञासा से, लगातार ग्राहक कुकी की क्या ज़रूरत है? –

+0

सफारी में एक बग है - http://openradar.appspot.com/14408523, इसलिए मुझे एक वर्कअराउंड के रूप में एक सतत कुकी की आवश्यकता है। – Artem

1

आप इसे निम्नलिखित कोड का उपयोग करके जावा-स्क्रिप्ट पर कर सकते हैं मैंने इस कुकी को 14 दिनों के भीतर समाप्त करने के लिए बनाया है।

var exdate = new Date(); 
exdate.setDate(exdate.getDate() + 14); 

document.cookie = "yourcookie=" + yourCookieValue + ";expires=" + exdate.toUTCString() + ";"; 
+1

सुरक्षा कारणों से ग्राहक और पहचान कुकीज़ केवल http हैं। – Artem

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