2010-03-24 15 views
5

परिचयअमान्य संदेश हस्ताक्षर जब क्लस्टर

पर OpenID प्रदाता चल हम एक OpenID प्रदाता जो हम DotNetOpenAuth घटक का उपयोग कर बनाया है। जब हम प्रदाता को एक नोड पर चलाते हैं तो सबकुछ बढ़िया काम करता है, लेकिन जब हम प्रदाता को एक लोड संतुलित क्लस्टर पर ले जाते हैं, जहां कई सर्वर प्रत्येक सत्र के लिए अनुरोधों को संभालने में कामयाब होते हैं तो हमें संदेश हस्ताक्षर के साथ समस्या मिलती है क्योंकि DotNetOpenAuth घटक कुछ अनूठा उपयोग कर रहा है प्रत्येक क्लस्टर नोड से हस्ताक्षर बनाने के लिए।

अपवाद

DotNetOpenAuth.Messaging.Bindings.InvalidSignatureException: Message signature was incorrect. 
    at DotNetOpenAuth.OpenId.ChannelElements.SigningBindingElement.ProcessIncomingMessage(IProtocolMessage message) in c:\BuildAgent\work\7ab20c0d948e028f\src\DotNetOpenAuth\OpenId\ChannelElements\SigningBindingElement.cs:line 139 
    at DotNetOpenAuth.Messaging.Channel.ProcessIncomingMessage(IProtocolMessage message) in c:\BuildAgent\work\7ab20c0d948e028f\src\DotNetOpenAuth\Messaging\Channel.cs:line 940 
    at DotNetOpenAuth.OpenId.ChannelElements.OpenIdChannel.ProcessIncomingMessage(IProtocolMessage message) in c:\BuildAgent\work\7ab20c0d948e028f\src\DotNetOpenAuth\OpenId\ChannelElements\OpenIdChannel.cs:line 172 
    at DotNetOpenAuth.Messaging.Channel.ReadFromRequest(HttpRequestInfo httpRequest) in c:\BuildAgent\work\7ab20c0d948e028f\src\DotNetOpenAuth\Messaging\Channel.cs:line 378 
    at DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty.GetResponse(HttpRequestInfo httpRequestInfo) in c:\BuildAgent\work\7ab20c0d948e028f\src\DotNetOpenAuth\OpenId\RelyingParty\OpenIdRelyingParty.cs:line 493 

सेटअप

हम सभी क्लस्टर नोड्स पर एक ही मशीन कुंजी का उपयोग करने की मशीन config सेटअप है और हम सेटअप SQL सर्वर के साथ प्रक्रिया सत्र से बाहर है।

प्रश्न

हम कैसे DotNetOpenAuth द्वारा प्रयोग किया जाता है अपने संदेशों पर हस्ताक्षर करने के लिए इतना है कि ग्राहक ही सत्र के दौरान क्लस्टर में सभी सर्वर से प्रतिक्रियाओं भरोसा करेंगे कुंजी कॉन्फ़िगर करते हैं?

+0

मुझे लगता है कि हमारे पास एक ही समस्या है: http://stackoverflow.com/questions/2505565/dotnetopenauth-message-ignature-was-incorrect –

+0

हमारे पास एक समान समस्या थी, लेकिन इसके बजाय एक गैर स्टोर स्टोर करने का विकल्प चुना गया जो सुंदर था सरल और हमारे खेत/बगीचे के सेटअप पर बहुत अच्छी तरह से काम करता है। लेकिन अब हमारे पास जो मुद्दा है वह हमारे अपने प्रदाता के साथ है, जिसे हम एक खेत में जाने की कोशिश कर रहे हैं, आरपी नहीं। – Garth

उत्तर

3

आप IProviderApplicationStore को लागू करना चाहिए और OpenIdProvider उदाहरण आप बनाने के लिए इस वस्तु का एक उदाहरण गुजरती हैं, या अपने web.config फ़ाइल में स्टोर प्रकार निर्धारित किया है। इस इंटरफ़ेस के आपके कार्यान्वयन को उस डेटाबेस तक पहुंच प्रदान करनी चाहिए जो आपके वेब फार्म शेयर में सभी सर्वर हैं।

+0

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

+1

इस इंटरफ़ेस का नाम बदलकर आजकल 'IOpenIdAplicationStore' कर दिया गया है। –

1

जब आप अपना OpenIdRelyingParty बनाते हैं तो सुनिश्चित करें कि आप कन्स्ट्रक्टर में शून्य पास करते हैं।

यह आपकी वेबसाइट को ओपनआईडी स्टेटलेस या 'गूंगा' मोड में डालता है। उपयोगकर्ताओं के लॉग इन करने के लिए यह थोड़ा धीमा है (यदि आप यहां तक ​​कि नोटिस भी करते हैं) लेकिन आप अपने खेत में काम करने के लिए DotNetOpenAuth को अनुमति देने के लिए एक आईरलींगपार्टी ऐप्लिकेशंसस्टोर लिखने से बचें;

var openIdRelyingParty = new OpenIdRelyingParty(null); 
+1

यह रिले पार्टी नहीं है, लेकिन प्रदाता। – Garth

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