Je rencontre des problèmes pour obtenir un RP DNOA fonctionnant derrière une appliance SSL (met fin à la connexion HTTPS du client et redirige le serveur HTTP vers le serveur Web derrière lui).DotNetOpenAuth RP échoue derrière l'appliance SSL
Le problème est que le RP est devinant correctement le point final du destinataire de la requête entrante (car il est pas HTTPS au moment où il touche le serveur Web) et en comparant le point final avec le schéma sur l'url return_to (qui est HTTPS) - il échoue avec la pile de pile ci-dessous. J'ai un peu spélé dans le code et je ne vois pas comment changer ce comportement sans une construction personnalisée ou une sous-classe non triviale. Je passe déjà la version HTTPS du domaine et ReturnToUrl à OpenIdRelyingParty.CreateRequests() - cette partie fonctionne très bien.
Est-il possible de fudger le schéma de destinataire détecté en HTTPS ou de comparer un schéma de saut sur une construction DNOA de stock, ou est-ce que je vais patcher une build personnalisée demain?
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()
Parfait - merci! Je ne contrôle pas l'appliance pour l'un des RPs, mais je vais certainement essayer sur celui que je fais (actuellement en utilisant une construction personnalisée avec une comparaison de schémas configurable). – nitzmahone
Basé sur le code à https://github.com/DotNetOpenAuth/DotNetOpenAuth/blob/master/src/DotNetOpenAuth.Test/Messaging/HttpRequestInfoTests.cs, je crois que l'en-tête de protocole devrait être HTTP_X_FORWARDED_PROTO –