DotNetOpenAuth RP перестал работать позади устройства SSL

Я испытываю затруднения при получении RP DNOA, работающего позади устройства SSL (завершает клиентское Подключение HTTPS и обратные прокси HTTP к веб-серверу позади него).

Проблема состоит в том, что RP неправильно предполагает конечную точку получателя от входящего запроса (так как это не HTTPS к тому времени, когда это поражает веб-сервер), и сравнение конечной точки со схемой на return_to URL (который является HTTPS) - это перестало работать с stacktrace ниже. У меня есть spelunked вокруг в коде немного, и я не вижу способ изменить это поведение без сделанного на заказ или нетривиального подкласса. Я уже передаю версию HTTPS Области и ReturnToUrl в OpenIdRelyingParty. CreateRequests () - что хорошо работающая часть.

Действительно ли возможно уклониться от обнаруженной схемы получателя к HTTPS или сравнению схемы пропуска на запасе сборка DNOA, или я исправляю сделанное на заказ завтра?


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()
7
задан nitzmahone 9 July 2010 в 01:06
поделиться

1 ответ

DotNetOpenAuth имеет встроенную поддержку устройств SSL, когда они добавляют эти специальные заголовки HTTP к перенаправляемому запросу HTTP: X_FORWARDED_PROTO и / или HTTP_HOST . Когда они присутствуют, автоматическое определение внешнего URL-адреса является правильным. Если вы можете настроить для этого свое устройство SSL, это, вероятно, лучший вариант.

Альтернативой является вызов OpenIdRelyingParty.GetResponse (HttpRequestInfo) вместо перегрузки, которая не принимает параметров. Вы сами создаете HttpRequestInfo , используя обращенный вовне URL-адрес, который, как вы знаете, является настоящим. Тогда логика сопоставления URL-адресов внутри DotNetOpenAuth не завершит запрос.

9
ответ дан 7 December 2019 в 03:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: