2010-07-09 8 views
7

मैं मुसीबत एक DNOA एक SSL उपकरण के पीछे काम कर रहे आरपी हो रही हो रही है पीछे विफल रहता है (ग्राहक HTTPS कनेक्शन और रिवर्स प्रॉक्सी HTTP इसके पीछे वेब सर्वर पर समाप्त हो जाता है)।DotNetOpenAuth आरपी एसएसएल उपकरण

समस्या

कि आरपी गलत तरीके से भेजे अनुरोध से प्राप्तकर्ता endpoint अनुमान लगा रहा है (यह बाद से नहीं HTTPS समय हिट वेबसर्वर द्वारा) और return_to यूआरएल पर योजना के साथ अंत बिंदु की तुलना (जो है एचटीटीपीएस) - यह नीचे stacktrace के साथ विफल रहता है। मैंने थोड़ा सा कोड में चारों ओर घूम लिया है और मुझे कस्टम निर्माण या गैर-तुच्छ उपखंड के बिना इस व्यवहार को बदलने का कोई तरीका नहीं दिख रहा है। मैं पहले से ही OpenIdRelyingParty.CreateRequests लिए क्षेत्र और ReturnToUrl के HTTPS वर्शन गुजर रहा हूँ() - इस भाग के काम-काज ठीक।

यह HTTPS का पता चला प्राप्तकर्ता योजना हेराफेरी या एक शेयर DNOA निर्माण पर योजना तुलना को छोड़, या मैं एक कल कस्टम निर्माण पैचिंग कर रहा हूँ करने के लिए संभव है?


स्टैकट्रेस: ​​

ERROR DotNetOpenAuth.Messaging - 09 Jul 2010 00:11:39,450 - Protocol error: The openid.return_to parameter (https://XXX/Login.aspx?openid=XXX&dnoa.userSuppliedIdentifier=XXX) does not match the actual URL (http://XXX/Login.aspx?openid=XXX&dnoa.userSuppliedIdentifier=XXX&openid.ns=http://specs.openid.net/auth/2.0&openid.mode=id_res&openid.op_endpoint=XXX&openid.response_nonce=XXX&openid.return_to=https://XXX/Login.aspx?openid=XXX&dnoa.userSuppliedIdentifier=XXX&openid.assoc_handle=XXX&openid.signed=op_endpoint,claimed_id,identity,return_to,response_nonce,assoc_handle&openid.sig=XXX&openid.identity=XXX&openid.claimed_id=XXX) the request was made with. 
at DotNetOpenAuth.Messaging.ErrorUtilities.VerifyProtocol(Boolean condition, String message, Object[] args) 
at DotNetOpenAuth.OpenId.Messages.IndirectSignedResponse.VerifyReturnToMatchesRecipient() 
at DotNetOpenAuth.OpenId.Messages.IndirectSignedResponse.EnsureValidMessage() 
at DotNetOpenAuth.Messaging.MessageSerializer.Deserialize(IDictionary`2 fields, MessageDictionary messageDictionary) 
at DotNetOpenAuth.Messaging.Reflection.MessageDictionary.Deserialize(IDictionary`2 fields) 
at DotNetOpenAuth.Messaging.Channel.Receive(Dictionary`2 fields, MessageReceivingEndpoint recipient) 
at DotNetOpenAuth.Messaging.Channel.ReadFromRequestCore(HttpRequestInfo request) 
at DotNetOpenAuth.Messaging.Channel.ReadFromRequest(HttpRequestInfo httpRequest) 
at DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty.GetResponse(HttpRequestInfo httpRequestInfo) 
at DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty.GetResponse() 

उत्तर

8

DotNetOpenAuth निर्मित एसएसएल उपकरणों के लिए समर्थन किया है जब वे अग्रेषित HTTP अनुरोध करने के लिए इन विशेष HTTP हेडर जोड़ें: X_FORWARDED_PROTO और/या HTTP_HOST। जब ये मौजूद होते हैं, बाहरी-सामने वाले यूआरएल का स्वतः पता लगाना सही होता है। यदि आप ऐसा करने के लिए अपने एसएसएल उपकरण को कॉन्फ़िगर कर सकते हैं, तो शायद यह सबसे अच्छा विकल्प है।

विकल्प अधिभार कि कोई पैरामीटर लेता है के बजाय OpenIdRelyingParty.GetResponse(HttpRequestInfo) कॉल करने के लिए है। आप HttpRequestInfo स्वयं को बाहरी-सामने वाले यूआरएल का उपयोग करके बनाते हैं जिसे आप जानते हैं असली है। फिर DotNetOpenAuth के अंदर यूआरएल मिलान तर्क अनुरोध विफल नहीं होगा।

+0

Perfect- धन्यवाद! मैं आर पी एस में से एक के लिए उपकरण को नियंत्रित नहीं है, लेकिन मैं निश्चित रूप से यह एक मैं (वर्तमान में एक कस्टम विन्यास योजना तुलना के साथ निर्माण का उपयोग) है पर एक कोशिश दे देंगे। – nitzmahone

+0

https://github.com/DotNetOpenAuth/DotNetOpenAuth/blob/master/src/DotNetOpenAuth.Test/Messaging/HttpRequestInfoTests.cs पर कोड के आधार पर, मेरा मानना ​​है कि प्रोटोकॉल हेडर वास्तव में HTTP_X_FORWARDED_PROTO होना चाहिए –