2015-02-06 8 views
12

हमारे पास ओविन कुकी प्रमाणीकरण का उपयोग कर एएसपी.नेट एमवीसी 5 ऐप है।क्या प्रति उपयोगकर्ता आधार पर ASP.NET Owin सुरक्षा कुकी का ExpireTimeSpan सेट करना संभव है?

public partial class Startup 
{ 
    public void ConfigureAuth(IAppBuilder app) 
    { 
     var timeoutInMinutes = int.Parse(ConfigurationManager.AppSettings["cookie.timeout-minutes"]); 

     app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 
      AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
      AuthenticationMode = AuthenticationMode.Active, 
      LoginPath = new PathString("/"), 
      ExpireTimeSpan = TimeSpan.FromMinutes(timeoutInMinutes), 
      SlidingExpiration = true, 
      LogoutPath = new PathString("/Sessions/Logout") 
     }); 
    } 
} 

हम अपने आवेदन के व्यवस्थापक अपने संगठन में सत्र समय समाप्ति अनुकूलित करने के लिए अनुमति देने के लिए एक सुविधा का अनुरोध किया है: वर्तमान में, हम इस प्रकार कुकी प्रमाणीकरण की स्थापना की। हालांकि, ऊपर कॉन्फ़िगरेशन कोड एमवीसी अनुप्रयोग स्तर पर निष्पादित करता है और हमारा ऐप बहु-किरायेदार है। क्या किसी को प्रमाणीकरण के दौरान या ओविन पाइपलाइन ईवेंट को ओवरराइड करके कहीं भी उपयोगकर्ता के सत्र के उपयोगकर्ता के सत्र के ExpireTimeSpan को सेट करने का तरीका पता है?

अग्रिम धन्यवाद!

उत्तर

11

प्रमाणीकरण विकल्पों में Provider नामक एक संपत्ति होती है। आप इसे डिफ़ॉल्ट प्रदाता पर सेट कर सकते हैं और लॉगिन की सेटिंग्स को संशोधित करने के लिए OnResponseSignIn जैसे विधि ओवरराइड का उपयोग कर सकते हैं, या आप अपना खुद का ICookieAuthenticationProvider लागू कर सकते हैं और ऐसा ही कर सकते हैं।

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    Provider = new CookieAuthenticationProvider 
    { 
     OnResponseSignIn = signInContext => 
     { 
      var expireTimeSpan = TimeSpan.FromMinutes(15); 

      if (signInContext.Properties.Dictionary["organization"] == "org-1") 
      { 
       expireTimeSpan = TimeSpan.FromMinutes(45); 
      } 

      signInContext.Properties.ExpiresUtc = DateTime.UtcNow.Add(expireTimeSpan); 
     } 
    } 
}); 

आप या तो यह देखने के लिए सत्र संभाला जाना चाहिए भेजे दावा जांच कर सकता है या आप कॉल में अपने हस्ताक्षर करने के लिए कस्टम डेटा जोड़ सकते हैं।

context.Authentication.SignIn(new AuthenticationProperties 
{ 
    Dictionary = 
    { 
     { "organization", "org-3" } 
    } 
}, new ClaimsIdentity()); 

आप भले ही आप वास्तव में चाहते थे कॉल में प्रवेश करने पर ExpiresUtc सेट कर सकते हैं, हालांकि यह सबसे अच्छा हो सकता है तो यह प्रबंधन करने के लिए आसान है प्रमाणीकरण प्रदाता में उस तर्क को छोड़ने के लिए।

+0

यह काम किया, धन्यवाद! –

+0

ExpiresUtc मेरे लिए काम नहीं कर रहा था, हालांकि यह आशाजनक लग रहा है। –

+0

मैं इस काम से कैसे थोड़ा परेशान हूं; विशेष रूप से, इस दृष्टिकोण ने एक स्लाइडिंग समाप्ति प्रदान की, और मुझे नहीं पता कि यह कैसे संभव है। OnResponseSignIn केवल एक बार कॉल किया जाता है, जब लॉग इन होता है, और ExpiresUtc एक विशिष्ट घड़ी के समय पर सेट होता है। तो अगर मैंने 12:01 पर लॉग इन किया है, तो ExpiresUtc 12:16 पर सेट हो जाता है ... लेकिन अगर मैं 12:05 पर अनुरोध करता हूं, हालांकि OnResponseSignIn में ब्रेकपॉइंट कभी भी हिट नहीं होता है, तो मेरा लॉगिन समाप्त नहीं होता है 12:16 लेकिन 12:20 तक वैध रहता है। बाद के अनुरोध के बावजूद मेरी कुकी को अभी भी 12:16 कहना चाहिए, तो यह कैसे संभव है? – Grank

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