Pregunta

tengo el proveedor de ejemplo DotNetOpenAuth que se ejecutan localmente y parece que manejar correctamente las solicitudes a través del navegador web. Puedo paso a través del controlador de autorización en el depurador.

Tengo un proyecto que puede autenticarse con Google y otros proveedores, pero falla con el proveedor de ejemplo. El proveedor de ejemplo nunca ve una solicitud en absoluto y la parte que confía lanza una excepción quejándose No OpenID endpoint found.

digo que lo siguiente en la parte que confía:

string providerURL = "http://localhost/openid/provider";

// Now try the openid relying party...
var openid = new OpenIdRelyingParty();
var response = openid.GetResponse();
if (response == null)
{
    Identifier id;
    if (Identifier.TryParse(providerURL, out id))
    {
        // The following line throws the exception without ever making
        // a request to the server.
        var req = openid.CreateRequest(providerURL);
        // Would redirect here...
    }
 }

Me di cuenta de que la clase UntrustedWebRequestHandler evitar conexiones a nombres de host como localhost pero añadiendo que como anfitrión en la lista blanca, de acuerdo con los casos de prueba o de forma manual, no parece ayudar.

He comprobado el anfitrión es accesible con lo siguiente:

// Check to make sure the provider URL is reachable.
// These requests are handled by the provider.
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(providerURL);
HttpWebResponse httpRes = (HttpWebResponse)request.GetResponse();

Los pensamientos? Estoy en extremo de los ingenios de por qué nunca se hace una petición a todos.

EDIT: localhost estaba en la lista blanca, así:

(openid.Channel.WebRequestHandler as UntrustedWebRequestHandler).WhitelistHosts.Add("localhost");

También he intentado listas blancas que añadiéndolo a web.config este modo:

<dotNetOpenAuth>
    <messaging>
        <untrustedWebRequest>
            <whitelistHosts>
                <add name="localhost"/>
            </whitelistHosts>
        </untrustedWebRequest>
    </messaging>
</dotNetOpenAuth>

El uso de uno u otro enfoque, localhost aparece en la lista del UntrustedWebRequestHandler de los ejércitos de la lista blanca cuando se examina en el depurador. Su proveedor todavía no recibió ninguna solicitud.

¿Fue útil?

Solución

Parece que ya está al tanto de la necesidad de una lista blanca localhost para un RP con el fin de conseguir que funcione. Pero hay otra cosa que se dio cuenta de que recientemente se IIS bloques de aplicaciones web ASP.NET HTTP de realizar entra en contacto con ellos mismos. Funciona para el Estudio Personal Web Server Visual, pero si su RP y OP son a la vez alojado en IIS bajo localhost, entonces es probable que IIS que está bloqueando él. Puede confirmar o negar esto mediante el uso de la prueba HttpWebRequest manuscrita de su RP alojado en IIS frente a una aplicación de consola.

Si los dos están bajo IIS y ese es el problema, entonces usted debe utilizar el Servidor Web personal para su desarrollo, o tal vez la separación de los dos sitios en IIS en diferentes piscinas aplicación o algo por el estilo que le ayudarán.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top