samples microsoft openid-connect identityserver3

openid connect - microsoft - IDX10803: no se puede crear para obtener la configuración



identityserver4 samples (7)

Mi configuración tiene 3 sitios: Identity Server (Idp), host de autenticación de Windows y mi sitio de cliente final. En el sitio del cliente, solicito un controlador decorado con [Authorize] y se activa el Servidor de Identidad.

El host de Windows en el puerto 44305 aparentemente está lanzando una excepción y el servidor de identidad está recibiendo un estado 500. Puedo acceder a la URL del sitio del host de windows sin ningún problema. Vuelvo un documento XML

¿Cómo depuro y descubro cuál es esa excepción o error que está deteniendo este proceso de autenticación? Obtengo una excepción de 3 partes con la parte más interna como la siguiente

InvalidOperationException: IDX10803: Unable to create to obtain configuration from: ''https://localhost:44305/''. Microsoft.IdentityModel.Protocols.ConfigurationManager`1.<GetConfigurationAsync>d__3.MoveNext() in ConfigurationManager.cs

El inicio de Windows Host OWIN está utilizando UseWindowsAuthenticationService

El Identity Server OWIN está utilizando AuthenticationOptions = WsFederationAuthenticationOptions

var wsFederationOptions = new WsFederationAuthenticationOptions { AuthenticationType = "windows", Caption = "Windows", SignInAsAuthenticationType = signInAsType, MetadataAddress = "https://localhost:44305/", Wtrealm = "urn:idsrv3" }; app.UseWsFederationAuthentication(wsFederationOptions); }

Aquí están las peticiones y respuestas.

Request URL:https://localhost:44315/ Request Method:GET Status Code:302 Found Response:Location:https://localhost:16433/connect/authorize?client_id=hms2015&redirect_uri=... Request: https://localhost:16433/connect/authorize?client_id=hms2015&redirect_uri=... Request Method:GET Status Code:302 Found Location:https://localhost:16433/login?signin=fde7508a6634698847c3076c9028604b Request URL:https://localhost:16433/login?signin=fde7508a6634698847c3076c9028604b Request Method:GET Status Code:500 Internal Server Error

No tengo problemas visibles de SSL. Con mi navegador, puedo abrir todas las páginas de los diferentes sitios sin previo aviso. Agrego mi certificado localhost IIS Express al Trusted Root Cert.


Desde mi memoria, este error se produce principalmente debido al problema de la confianza del certificado / acceso a la red. Dado que está ejecutando todos los componentes en el host local, definitivamente no es un problema de red. Supongo que está ejecutando desde el entorno VS Dev.

Un par de cosas:

  • Intenta alojar los componentes en el servidor IIS
  • En lugar de usar localhost, cree un certificado autofirmado para su host e intente asignar su nombre de host como el nombre del sujeto (tenga en cuenta que: certificado de firma de identidad y certificado autofirmado para SSL de host)

Además, asigne permisos para leer el certificado como se describe aquí https://github.com/IdentityServer/IdentityServer3.Samples/tree/master/source/Certificates

Si aún tiene este problema, intente monitorear el tráfico a través de Wireshark (Fiddler no funcionará en este caso)


Mi equipo enfrentó los siguientes problemas: [Error] Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler: se produjo una excepción al procesar el mensaje. System.InvalidOperationException: IDX10803: no se puede obtener la configuración de: '' https: // [el dominio de su servidor de identidad] /. / Configuración openid conocida. ---> System.IO.IOException: IDX10804: No se puede recuperar el documento de: '' https: // [su dominio del servidor de identidad]. Bien conocido / configuración openid''. ---> System.Net.Http.HttpRequestException: el intento de conexión falló porque la parte conectada no respondió correctamente después de un período de tiempo o la conexión establecida falló porque el host conectado no respondió ---> System.Net.Sockets .SocketException: un intento de conexión falló porque la parte conectada no respondió correctamente después de un período de tiempo, o la conexión establecida falló porque el host conectado no respondió en System.Net.Http.ConnectHelper.ConnectAsync (String host, Int32 port, Cancelado) cancelaciónToken) --- Fin del seguimiento de la pila de excepción interna ---

Pasamos mucho tiempo para averiguar la razón. Finalmente, solo un error muy simple, en el entorno UAT, la configuración del archivo hosts fue incorrecta en "C: / Windows / System32 / drivers / etc". Los dominios definidos en el archivo hosts no coinciden con el enlace de dominios en IIS.


Otro desarrollador en el equipo ayudó a encontrar el problema. El host de autenticación de Windows que se ejecuta en el puerto 44305 tenía anónimo deshabilitado. Cuando se habilitó esto, el proceso redirigido comenzó a funcionar nuevamente.

Lamentablemente, no detectamos realmente el error, pero, a través de prueba y error (piratería), se solucionó. Mi pregunta principal era cómo depurar una aplicación OWIN para poder ver los detalles del HTTP 500. Me gustaría que los registros de IdentityServer3 hubieran registrado la respuesta del host de Win Auth. Además, ¿por qué no es un código de respuesta 401?


Para propósitos de prueba, agregué el siguiente bloque como la primera pieza de middleware en mi canalización. Esto realmente registrará la excepción siempre que ocurra una. Esto me llevó a ver que mi 500 en realidad era un 401.

appBuilder.Use(async (context, next) => { try { await next(); } catch(Exception ex) { Log.Error(ex, "OWIN error."); } });


Podría ser debido a la autenticación proxy también. Intente verificar el tráfico de fiddler para ver las llamadas login.microsoftonline.com:XXX y ver si está devolviendo el código de error 407.

Si ve el código de error 407, debe habilitar la autenticación proxy en web.config


Tenía este problema y necesitaba confiar en el certificado según la respuesta de Robert Muehsig .

Pero esto por sí solo no fue suficiente. Estoy usando la autenticación de token de portador. Un poco más de investigación reveló que necesitaba establecer el indicador DelayLoadMetadata en verdadero.

Así que en mi inicio de API web:

app.UseIdentityServerBearerTokenAuthentication( new IdentityServerBearerTokenAuthenticationOptions { DelayLoadMetadata=true });

Después de esto y el certificado de confianza cambiaron, comenzó a funcionar. Sé que esta no es la misma configuración que el problema original, pero durante mi búsqueda seguí encontrando este post, así que pensé que lo pondría aquí para cualquier otra persona que lo encuentre ...


Tuve el mismo problema: parece que el certificado SSL no era confiable. Para resolver este problema, trasladé el certificado IIS Express "localhost" de Personal CertStore a las autoridades certificadoras de raíz de confianza y el problema desapareció.