OpenIdProvider.GetRequest () devuelve null

Como una especie de continuación deesta pregunta, estoy teniendo problemas con dotnetopenauth.

Navego a mi código de usuario de confianza y creo la solicitud, sin embargo, cuando mi proveedor recibe la solicitudOpenIdProvider.GetRequest() devuelve nulo. Revisé el código y, por lo que puedo decir, esto se debe a que la parte de confianza de openid (request.form) no se entrega; pero no puedo entender por qué esto es.

Código:

Fiesta de confianza

public ActionResult Authenticate(string RuserName = "")
{
UriBuilder returnToBuilder = new UriBuilder(Request.Url);
returnToBuilder.Path = "/OpenId/Authenticate";
returnToBuilder.Query = null;
returnToBuilder.Fragment = null;

Uri returnTo = returnToBuilder.Uri;
returnToBuilder.Path = "/";
Realm realm = returnToBuilder.Uri;

var response = openid.GetResponse();

if (response == null) {
    if (Request.QueryString["ReturnUrl"] != null && User.Identity.IsAuthenticated) {

    } else {

    string strIdentifier = "http://localhost:3314/User/Identity/" + RuserName;
    var request = openid.CreateRequest(
        strIdentifier,
        realm,
        returnTo);

    var fetchRequest = new FetchRequest();
    request.AddExtension(fetchRequest);
    request.RedirectToProvider();
    }
} else {
    switch (response.Status) {
        case AuthenticationStatus.Canceled:
            break;
        case AuthenticationStatus.Failed:
            break;
        case AuthenticationStatus.Authenticated:
            //log the user in
            break;
    }
}

return new EmptyResult();

}

Proveedor:

public ActionResult Index()
{
    IRequest request = OpenIdProvider.GetRequest();

    if (request != null) {
        if (request.IsResponseReady) {
            return OpenIdProvider.PrepareResponse(request).AsActionResult();
        }

        ProviderEndpoint.PendingRequest = (IHostProcessedRequest)request;
        return this.ProcessAuthRequest();
    } else {
        //user stumbled on openid endpoint - 404 maybe?
        return new EmptyResult();
    }
 }

public ActionResult ProcessAuthRequest()
    {
        if (ProviderEndpoint.PendingRequest == null) {
            //there is no pending request
            return new EmptyResult();
        }

        ActionResult response;
        if (this.AutoRespondIfPossible(out response)) {
            return response;
        }

        if (ProviderEndpoint.PendingRequest.Immediate) {
            return this.SendAssertion();
        }

        return new EmptyResult();
    }

Registros:

RP: 1)http://pastebin.com/Pnih3ND7 2)http://pastebin.com/eBzGun9y

Proveedor:http://pastebin.com/YAUTBzHk

Curiosamente, el registro de RP dice que el host local no es confiable ... pero lo agregué a los hosts de la lista blanca en mi web.config, y estaba "funcionando" ayer ...

EDIT: Está bien, esto es raro. Ayer estaba revisando la fuente de DNOA tratando de averiguar cuál es el problema. Permití log4net y creó el archivo de registro y lo dejó en blanco. Hoy configuré log4net nuevamente, se registró correctamente, pero tuve un error que no tenía sentido (ver arriba). Tampoco pude entrar en la fuente de DNOA. Quité y volví a agregar la referencia a dotnetopenauth.dll, y luego mi "error original" con los hosts incluidos en la lista blanca desapareció, pude ingresar a la fuente, pero el archivo de registro estaba en blanco nuevamente. Y todavía tengo el problema con request.form no se está rellenando ...

EDIT2: Mis dos controladores se denominan "OpenIdController" (tanto en el RP como en el EP). Mi RP se ejecuta en localhost: 1903, y mi punto final se ejecuta en localhost: 3314.

EDITAR3: Después de hacer los cambios, sugirió que las cosas empezaron a funcionar. El RP realiza bien el descubrimiento, pero tengo un problema cuando realmente realiza la solicitud.

La líneaIRequest i_request = OpenIdProvider.GetRequest(); Funciona bien, pero cuando intento lanzarlo:IAuthenticationRequest iR = (IAuthenticationRequest)i_request; me da el siguiente error:

 System.InvalidCastException was unhandled by user code
 Message=Unable to cast object of type     'DotNetOpenAuth.OpenId.Provider.AutoResponsiveRequest' to type 'DotNetOpenAuth.OpenId.Provider.IAuthenticationRequest'.
 Source=Portal
 StackTrace:
   at Portal.Controllers.OpenIdController.Index() in Controllers\OpendIdController.cs:line 35
   at lambda_method(Closure , ControllerBase , Object[] )
   at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
   at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41()
   at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()

Este código es un poco de un hodge-podge entre las dos muestras que encontré relevantes. Quiero configurar un entorno de tipo SSO, por lo que la mayoría del código que estoy usando es de\DotNetOpenAuth-4.1.0.12182\Samples\OpenIdWebRingSsoProvider\Code\Util.cs (Función ProcessAuthenticationChallenge). Sin embargo, como esa función espera unaIAuthenticationRequest pero OpenIdProvider.GetRequest devuelve unAutoResponsiveRequest Pensé que sería capaz de lanzarlo para usar las propiedades y métodos delIAuthenticationRequest clase. Obviamente estaba equivocado.

No estoy muy seguro de cómo abordar las cosas en este punto. ¿Debo utilizar el código de muestra de la muestra OpenIdProviderMVC? La clave es que el inicio de sesión funciona como un inicio de sesión único, y al usuario nunca se le solicita que ingrese un OpenId. También solo tendré un punto final (aunque tendré múltiples RP).

Aquí está el enlace a los registros RP más recientes:http://pastebin.com/enpwYqq3

EDITAR 4: Hice lo que sugeriste, e hice algunos progresos. Mi EP recibe la respuesta y la procesa hasta donde puedo decir, pero cuando la redirige de nuevo a la URL del reino, se produce un error.

012-10-10 13:55:01,171 (GMT-4) [25] ERROR DotNetOpenAuth.Messaging - Protocol error: An HTTP request to the realm URL (http://localhost:1903/) resulted in a redirect, which is not allowed during relying party discovery.

¿Cuál es exactamente la función de laRealm a diferencia de laReturnTo? Usando el código de muestra, el Reino termina siendohttp://localhost:1903/ y el ReturnTo termina siendohttp://localhost:1903/OpenId/Authenticate lo que parece bien. ¿Por qué el PE necesita hacer una solicitud al reino? Habría pensado que simplemente debería estar enviando la aserción al returnTo una vez que terminó de procesarse. Si configuro manualmente el reino ahttp://localhost:1903/OpenId/Authenticate entoncesrelyingParty.GetResponse() devuelve nulo.

Tengo mi aplicación configurada para redirigir cuando alguien accede a la url base (http://localhost:1903): ¿qué código debería haber ejecutado allí para interceptar la solicitud de DNOA EP?

Nuevos registros:

RP:http://pastebin.com/L9K5Yft4

EP:http://pastebin.com/kBPWiUxp

También he actualizado el código al comienzo de la pregunta para reflejar mejor los cambios que he realizado.

EDITAR5: ¿El reino tiene que ser la URL base real de la aplicación? Es decir, (http://localhost:1903)? Dada la arquitectura existente, es difícil eliminar el redireccionamiento. Intenté configurar el reino en el controlador OpenId base (http://localhost:1903/OpenId) y las pruebas manualmente generaron el documento XRDS. Sin embargo, la aplicación parece congelarse y el registro de EP revela el siguiente error:

2012-10-10 15:17:46,000 (GMT-4) [24] ERROR DotNetOpenAuth.OpenId - Attribute Exchange extension did not provide any aliases in the if_available or required lists.

Respuestas a la pregunta(2)

Su respuesta a la pregunta