2010-07-09 23 views
7

sorun bir SSL cihazın arkasında çalışan bir DNOA RP alma yaşıyorum arkasında başarısız (arkasında web sunucusu istemci HTTPS bağlantısı ve ters proxy, HTTP sonlandırır).DotNetOpenAuth RP SSL cihazın

sorun RP hatalı isteğin geldiği alıcı uç noktasını tahmin olmasıdır (Çünkü o değil HTTPS o vurur zaman web sunucusu tarafından) ve return_to url üzerinde şeması ile son nokta karşılaştıran (HTTPS) - Aşağıdaki stacktrace ile başarısız. Kodda biraz dolaştım ve bu davranışı özel bir yapı veya önemsiz olmayan bir alt sınıf olmadan değiştirmenin bir yolunu görmüyorum. Zaten Realt ve ReturnToUrl HTTPS sürümünü OpenIdRelyingParty.CreateRequests() - bu bölüm çalışıyor.

HTTPS tespit alıcı düzeni geçiştirmek veya stok DNOA yapı üzerinde düzeni karşılaştırma atlamak, yoksa özel bir yapı yarın bandajlamama ediyorum mümkün mü?

stacktrace:

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() 

cevap

8

DotNetOpenAuth yerleşik SSL aletleri için destek Yönlendirilen HTTP isteğine bu özel HTTP başlıklarını eklediğinizde: X_FORWARDED_PROTO ve/veya HTTP_HOST. Bunlar mevcut olduğunda, dışa bakan URL'nin otomatik algılanması doğrudur. SSL cihazınızı bunu yapmak için yapılandırabilirseniz, muhtemelen en iyi seçenek budur.

Alternatif olarak, parametre almayan aşırı yüklenme yerine OpenIdRelyingParty.GetResponse(HttpRequestInfo) numaralı telefonu aramak gerekir. Gerçek olanı bildiğiniz dışa dönük URL'yi kullanarak HttpRequestInfo'u kendiniz yapılandırabilirsiniz. Ardından, DotNetOpenAuth içindeki URL eşleştirme mantığı isteği başarısız olur.

+0

Kusursuz - teşekkürler! Ben RPs biri için cihazı kontrol etmiyoruz, ama kesinlikle o ben (şu anda yapılandırılabilir düzeni karşılaştırma ile inşa göndermek için özel bir) do birinde deneyeceğinizi. – nitzmahone

+0

https://github.com/DotNetOpenAuth/DotNetOpenAuth/blob/master/src/DotNetOpenAuth.Test/Messaging/HttpRequestInfoTests.cs adresindeki koda göre, protokol başlığının aslında HTTP_X_FORWARDED_PROTO olması gerektiğine inanıyorum –