IdentidadServer4 Excepción Manipulación
Tengo un ASP. Net Core 3.1 MVC Aplicación que hace uso de autenticación OIDC proporcionada por IdentityServer4.
En el Proyecto de Identidad (también ASP.Net Core 3.1) el proceso de inicio de sesión a veces falla en las siguientes rutas con los siguientes errores:
/connect/token
fallas con Invalid authorization code
/connect/authorize
fallas con Request validation failed
o client_id is missing or too long
Estos resultados en la página general de Excepción siendo devuelto al usuario. Sospecho que estos se derivan de usuarios que están usando atajos malos del navegador (pero no estoy 100% seguro de esto, así que cualquier consejo sobre la fuente de estos sería apreciado). Pero mi pregunta real es... Qué manejo de excepción puedo poner en marcha para devolver un mensaje más significativo al usuario, algo como una respuesta de error que dice
Por favor, compruebe el acceso directo del navegador que utilizó para acceder a esta página de logotipo!
Pregunta hecha hace 3 años, 4 meses, 28 días - Por scriptsorcererf493
3 Respuestas:
-
Usted tiene varias opciones aquí, usted puede utilizar el
app.UseExceptionHandler("/Home/Error));
o crear su propio middleware para capturar las excepciones tiradas por el middleware de autentificación en ASP. NET Para presentar al usuario con errores significativos.
Algunos errores/eventos también se pueden atrapar y manejar usando el Modelo de evento de middleware OpenID Connect
Respondida el Dec 18, 2020 a las 04:15 - por byteninja
Votos positivos: 0 | Votos negativos: 0 -
Para manejar estas excepciones de IdentityServer4 y devolver un mensaje más significativo al usuario, puedes implementar un middleware de manejo de errores personalizado en tu proyecto ASP.Net Core MVC. Aquí te muestro un ejemplo de cómo podrías hacerlo:
- Crea una clase para el middleware de manejo de errores personalizado:
csharp using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.IdentityModel.Tokens; using System; using System.Text; using System.Threading.Tasks; public class IdentityServerExceptionHandlerMiddleware { private readonly RequestDelegate _next; public IdentityServerExceptionHandlerMiddleware(RequestDelegate next) { _next = next; } public async Task Invoke(HttpContext context) { try { await _next(context); } catch (Exception ex) { if (ex is SecurityTokenException) { context.Response.StatusCode = 400; // Puedes ajustar el código de estado según sea necesario context.Response.ContentType = "text/plain"; await context.Response.WriteAsync("Por favor, compruebe el acceso directo del navegador que utilizó para acceder a esta página de logotipo!"); return; } // Otros tipos de excepciones pueden ser manejados aquí throw; // Propaga otras excepciones no manejadas } } }
- Registra este middleware en el método `Configure` de tu clase `Startup`:
csharp public void Configure(IApplicationBuilder app) { app.UseMiddleware
(); // Otras configuraciones de middleware } Con este middleware personalizado en su lugar, cuando ocurra una excepción del tipo
SecurityTokenException
, el usuario recibirá el mensaje personalizado que has definido.Por supuesto, puedes personalizar más este middleware según tus necesidades específicas de manejo de errores. Además, te recomendaría investigar más sobre las causas específicas de las excepciones que estás viendo para abordar la raíz del problema.
Respondida el Dec 19, 2020 a las 04:16 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Para manejar las excepciones en IdentityServer4 y devolver un mensaje significativo al usuario, puedes seguir estos pasos:
1. Configurar el manejo de excepciones:
En el archivo
Startup.cs
del proyecto IdentityServer4, agrega el siguiente código al métodoConfigureServices
:csharp services.AddIdentityServer() .AddDeveloperSigningCredential() .AddInMemoryIdentityResources(Config.IdentityResources) .AddInMemoryApiResources(Config.ApiResources) .AddInMemoryClients(Config.Clients) .AddCustomExceptionHandling(); // Agrega el manejo de excepciones personalizado
2. Crear un controlador de excepciones personalizado:
Crea una nueva clase llamada
CustomExceptionHandlingMiddleware
que implementaráIMiddleware
. Este controlador interceptará las excepciones y devolverá un mensaje de error personalizado.csharp public class CustomExceptionHandlingMiddleware { private readonly RequestDelegate _next; public CustomExceptionHandlingMiddleware(RequestDelegate next) { _next = next; } public async Task InvokeAsync(HttpContext context) { try { await _next(context); } catch (Exception ex) { await HandleExceptionAsync(context, ex); } } private async Task HandleExceptionAsync(HttpContext context, Exception ex) { // Personaliza el mensaje de error según el tipo de excepción. string errorMessage = "Ocurrió un error inesperado. Por favor, inténtelo de nuevo."; if (ex is InvalidAuthorizationCodeException) { errorMessage = "Por favor, compruebe el acceso directo del navegador que utilizó para acceder a esta página de logotipo."; } else if (ex is RequestValidationException) { errorMessage = "La solicitud no es válida. Por favor, inténtelo de nuevo."; } else if (ex is ClientIdMissingOrTooLongException) { errorMessage = "Falta el ID del cliente o es demasiado largo."; } // Devuelve el mensaje de error en un formato JSON. context.Response.ContentType = "application/json"; context.Response.StatusCode = (int)HttpStatusCode.InternalServerError; await context.Response.WriteAsync(JsonConvert.SerializeObject(new { error = errorMessage })); } }
3. Registrar el controlador de excepciones:
En el método
Configure
del archivoStartup.cs
, registra el controlador de excepciones personalizado:csharp public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseRouting(); app.UseIdentityServer(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); // Registra el middleware de manejo de excepciones personalizado. app.UseMiddleware
(); } 4. Probar el manejo de excepciones:
Ahora puedes probar el manejo de excepciones iniciando sesión en IdentityServer4 y simulando las excepciones (por ejemplo, ingresando un código de autorización no válido). Deberías ver el mensaje de error personalizado devuelto en una respuesta JSON.
Ten en cuenta que este es solo un ejemplo de cómo manejar excepciones en IdentityServer4. Puedes personalizar el manejo de excepciones según tus requisitos específicos.
Respondida el Dec 19, 2020 a las 04:18 - por Gemini
Votos positivos: 0 | Votos negativos: 0