2011-11-14 19 views
5

मैं डब्ल्यूआईएफ में स्लाइडिंग सत्र स्थापित करने की कोशिश कर रहा हूं और SessionSecurityTokenReceived को संभालने की आवश्यकता है।मैं ग्लोबल.एक्सएक्स में सत्र सत्र सुरक्षितता को प्राप्त कैसे कर सकता हूं?

मुझे यकीन है कि मैं यहाँ कुछ गूंगा कर रहा हूं ... लेकिन वीएस -2010 मुझे बताए गए स्थान पर There is no applicable variable or member बता रहा है। क्या कोई मुझे सही दिशा दिखा सकता है? मैंने इस घटना के संचालन को परिभाषित करने के तरीके के वास्तविक नमूने के लिए उच्च और निम्न खोजा है, लेकिन मुझे एक भी नहीं मिल रहा है।

Global.asax

protected void Application_Start() 
{ 

    FederatedAuthentication.WSFederationAuthenticationModule.SecurityTokenReceived 
      += SessionAuthenticationModule_SessionSecurityTokenReceived; 
    //   ^^^ There is no applicable variable or member 
} 



void SessionAuthenticationModule_SessionSecurityTokenReceived(object sender, SessionSecurityTokenReceivedEventArgs e) 
{ 
      DateTime now = DateTime.UtcNow; 
      DateTime validFrom = e.SessionToken.ValidFrom; 
      DateTime validTo = e.SessionToken.ValidTo; 
      if ((now < validTo) && 
      (now > validFrom.AddMinutes((validTo.Minute - validFrom.Minute)/2)) 
      ) 
      { 
       SessionAuthenticationModule sam = sender as SessionAuthenticationModule; 
       e.SessionToken = sam.CreateSessionSecurityToken(
        e.SessionToken.ClaimsPrincipal, 
        e.SessionToken.Context, 
        now, 
        now.AddMinutes(2), 
        e.SessionToken.IsPersistent); 
       e.ReissueCookie = true; 
      } 
      else 
      { 
       //todo: WSFederationHelper.Instance.PassiveSignOutWhenExpired(e.SessionToken, this.Request.Url); 

       // this code from: http://stackoverflow.com/questions/5821351/how-to-set-sliding-expiration-in-my-mvc-app-that-uses-sts-wif-for-authenticati 

       var sessionAuthenticationModule = (SessionAuthenticationModule)sender; 

       sessionAuthenticationModule.DeleteSessionTokenCookie(); 

       e.Cancel = true; 
      } 
    } 

उत्तर

9

मैं तुम्हें घटना सदस्यता की आवश्यकता नहीं लगता। प्रारंभ पर subcription निकालें और बस का उपयोग

SessionAuthenticationModule_SessionSecurityTokenReceived

ASP.Net कि तार होगा आप के लिए। (मॉड्यूल को "सत्र प्रमाणीकरण मॉड्यूल" नाम दिया जाना चाहिए और यह डिफ़ॉल्ट रूप से है)।

आप रपट सत्र पर काम कर रहे हैं, तो इस ब्लॉग पोस्ट विटोरियो से बहुत अच्छी है: http://blogs.msdn.com/b/vbertocci/archive/2010/06/16/warning-sliding-sessions-are-closer-than-they-appear.aspx

+5

आसान और एक आकर्षण की तरह काम करता है! मैं उन घटनाओं के बीच अंतर कैसे बता सकता हूं जिनके लिए वायरिंग की आवश्यकता है, और जो – LamonteCristo

0
इसके बजाय Global.asax में यह परिभाषित करने की

, एक नया वर्ग है कि SessionAuthenticationModule विरासत बनाएँ:

public class CustomAuthenticationModule : SessionAuthenticationModule 
{ 
    public CustomAuthenticationModule : base() 
    { 
     this.SessionSecurityTokenReceived += new EventHandler<SessionSecurityTokenReceivedEventArgs>(CustomAuthenticationModule_SessionSecurityTokenReceived); 
    } 

    void CustomAuthenticationModule_SessionSecurityTokenReceived(object sender, SessionSecurityTokenReceivedEventArgs e) 
    { 
     // Your code 
    } 
} 

फिर अपने web.config में, अपने नए मॉड्यूल के साथ डिफ़ॉल्ट सत्र प्रमाणीकरण मॉड्यूल को प्रतिस्थापित करें:

<modules> 
    <add name="SessionAuthenticationModule" type="CustomAuthenticationModule" preCondition="managedHandler"/> 
</modules> 
+0

नहीं हैं, धन्यवाद, मैं हाल ही में कुछ कॉन्फ़िगरेशन के साथ संघर्ष कर रहा हूं और यह मेरा दिन बचा है (मेरे पास वैश्विक पृष्ठ नहीं है), हालांकि यह है विशेष रूप से global.asax में नहीं और शायद किसी अन्य धागे में होना चाहिए, लेकिन मैं इस जानकारी को कहीं और नहीं ढूंढ पाया। – Mochi

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

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