Saltar al contenido

Acceso a las credenciales de usuario en el middleware ASP.NET Core

Ten en cuenta que en las ciencias cualquier problema casi siempre tiene más de una soluciones, no obstante te enseñamos lo mejor y más óptimo.

Solución:

Cambiar PermitirAnónimo

options.Authentication.AllowAnonymous = false;

Si tiene activado el anonimato y no está solicitando la autenticación, entonces el navegador no se autenticará. Incluso si envía creaciones, asp.net no las obtendrá a menos que haya una autenticación attribute en el controlador/método o, si va por la ruta de la función, llama al inicio de sesión.

Si no desea configurar AllowAnonymous como falsetu podrías intentar context.ChallengeAsync para autenticar la solicitud basada en Credential.

Aquí está el código:

        app.MapWhen(context => context.Request.Path.Equals("/sensitiveOperation") && context.Request.Method.Equals(HttpMethods.Put), subApp =>
        
            subApp.Run(async (context) =>
            
                var authService = context.RequestServices.GetRequiredService();

                if (!context.User.Identity.IsAuthenticated)
                
                    //await context.ChallengeAsync("Windows"); //Option1
                    //await context.ChallengeAsync();  //Option2
                    await context.ChallengeAsync(HttpSysDefaults.AuthenticationScheme); //Option3
                
                if (context.User.Identity.Name == "admin")
                
                    await context.Response.WriteAsync("Performing sensitive operation.");
                    // .. Do Sensitive operation....
                
            );
        );

Notapor esta vía, subApp.Run se ejecutará dos veces, la primera solicitud no está autenticada y cuestionará la credencial, la segunda solicitud está autenticada y context.User.Identity.Name tendrá valor. Este proceso es back-end, esto no se reflejaría en powershell.

Estoy usando .NET Core 3.0 y en mi middleware personalizado pude obtener el ID de usuario con este código:

httpContext.User.Identity.IsAuthenticated 
    ? new Guid(httpContext.User.Claims.Where(c => c.Type == ClaimTypes.NameIdentifier).First().Value)
    : Guid.Empty

valoraciones y reseñas

Si para ti ha sido de provecho este post, sería de mucha ayuda si lo compartieras con otros juniors así contrubuyes a dar difusión a esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *