2013-02-20 11 views
10

में दूसरे उपयोगकर्ता के लॉग मैं एक ही उत्पादन वातावरण बहुत सिर खरोंच है कि में एक मुद्दा होने वाली है।ContextSessionSecurityToken ओवरराइट जा रहा है जब

आप दो उपयोगकर्ताओं, एक है और में बी उपयोगकर्ता A लॉग, सब कुछ ठीक काम करता है। उपयोगकर्ता बी लॉग इन करता है, और उपयोगकर्ता बी के बाद लॉग इन करता है, उपयोगकर्ता ए में अब उपयोगकर्ता बी के रूप में एक ही सुरक्षा टोकन है।

हमारा डब्ल्यूआईएफ सेटअप काफी मानक है, हम टोकन पर कुछ कस्टम दावों को इंजेक्ट करते हैं, लेकिन बाकी सब कुछ मानक दिखता है जहां तक ​​टोकन बनाया और संग्रहीत किया जा रहा है (WIF द्वारा संभाला गया)।

महसूस की तरह मैं WIF है कि मैं के साथ

अद्यतन परिचित नहीं हूँ के साथ कुछ अजीब बढ़त मामले में चल रहा है हो सकता है: दोनों ए और बी अलग मशीनों, या एक ही मशीन पर अलग ब्राउज़रों पर हो सकता है।

जब एक सेवा

if (HttpContext.Current == null) 
    return null; 

if (HttpContext.Current.Cache == null) 
    return null; 

if (FederatedAuthentication.SessionAuthenticationModule == null) 
    return null; 

if (FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken == null) 
    return null; 

var sessionToken = FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken; 
if (sessionToken.ClaimsPrincipal == null) 
    throw new InvalidOperationException("The ClaimsPrincipal property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object is null"); 
if (sessionToken.ClaimsPrincipal.Identities == null) 
    throw new InvalidOperationException("The ClaimsPrincipal.Identities sub-property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object is null"); 
if (sessionToken.ClaimsPrincipal.Identities.Count == 0) 
    throw new InvalidOperationException("The ClaimsPrincipal.Identities sub-property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object has no identities"); 
if (sessionToken.ClaimsPrincipal.Identities[0] == null) 
    throw new InvalidOperationException("The first identity in the ClaimsPrincipal.Identities sub-property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object is null"); 
if (sessionToken.ClaimsPrincipal.Identities[0].Claims == null) 
    throw new InvalidOperationException("The first identity in the ClaimsPrincipal.Identities sub-property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object as a null Claims property"); 

return TokenUtility.GetDelegatedToken(IssuedTokenTypes.UserProfile | IssuedTokenTypes.AccountPermissions, sessionToken); 

का अनुरोध अगर मैं यहाँ मैं sessionToken.ClaimsPrincipal.Identity.Name देख सकते हैं प्रवेश करने जोड़ने हम कहाँ टोकन प्राप्त नाम यह इस बिंदु पर माना जाता है से अलग है।

+0

आप एक पीसी पर में एक लॉग मतलब है, बी एक ही पीसी, एक ही ब्राउज़र सत्र या क्या का उपयोग करता है? – nzpcmad

+2

साइट को दो अलग-अलग मशीनों/ब्राउज़रों से ब्राउज किया गया है, तो संभव नहीं है। टोकन साइट पर पोस्ट किए जाते हैं और एक कुकी में बने रहते हैं। उपयोगकर्ताओं के बीच साझा करने का कोई तरीका नहीं है जब तक कि आप स्थैतिक चर में डेटा संग्रहीत करने की तरह कुछ गलत तरीके से गलत नहीं करते हैं। –

+0

@nzpcmad आप एक ही मशीन पर दो अलग-अलग ब्राउज़रों पर हो सकते हैं। आप दो अलग मशीनों पर हो सकते हैं। – jcolebrand

उत्तर

0

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

1

अपने निर्भर पार्टी और एसटीएस (WIF) सर्वर एक ही आईआईएस एक ही आवेदन पूल का उपयोग कर पर होस्ट कर रहे हैं? यदि हां, तो विभिन्न एप्लिकेशन पूल का उपयोग करके प्रयास करें क्योंकि कार्यकर्ता प्रक्रिया कभी-कभी चीजों को गड़बड़ करने के लिए उपयोग करती है। आशा है कि यह आपकी मदद करेगा।

0

यह मदद मिलेगी अगर आप कुछ अतिरिक्त दोनों किसी भी वेब विन्यास सेटिंग्स के साथ-साथ IIS कॉन्फ़िगरेशन और .नेट फ्रेमवर्क संस्करण के बारे में जानकारी पोस्ट किया गया। मेरे लिए, यह एक एप्लिकेशन पूल मुद्दे की तरह लगता है लेकिन यह आपके सिस्टम के बेहद सीमित ज्ञान के साथ है। यदि आवेदन पूल पहचान कस्टम है तो निश्चित रूप से उसी उपयोगकर्ता तक पहुंचने तक, जब तक लोकलसिस्टम या प्रतिरूपण सेट नहीं किया जाता है। यदि यह समस्या नहीं है तो अपनी प्राधिकरण सेटिंग जांचें, और सुनिश्चित करें कि अनौपचारिक, और बुनियादी बंद हो गए हैं, या जो कुछ भी हो सकता है, उसके लिए आपके आवेदन की आवश्यकता है।

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