Agregar una política de autorización interrumpe la devolución de la URL de retorno predeterminada/scaffolded Identity en la aplicación web ASP.NET 6.
Estoy enfrentando un problema en el que la URL de retorno no se está formateando correctamente después de agregar una política de autorización a mi archivo Program.cs de la aplicación web ASP.NET 6.
Pasos para reproducir el problema:
1. Crear una aplicación web ASP.NET 6 con cuentas individuales.
2. Crear una base de datos en SQL Server y actualizar la cadena de conexión en el archivo appsettings.json.
3. Ejecutar el comando Update-Database para crear las tablas predeterminadas de ASP.NET Identity.
4. Generar todas las páginas de identidad utilizando la clase ApplicationDbContext y IdentityUser predeterminadas.
En este punto, todo funciona como debería. Puedo registrar un nuevo usuario e iniciar sesión.
- Agregar una política de autorización a program.cs para requerir que el usuario haya iniciado sesión para acceder a la aplicación.
builder.Services.AddAuthorization(options => {
options.FallbackPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
});
En este punto, al iniciar la aplicación, se redirige a una URL incorrecta:
(en MS Edge)
Hmmm … no se puede acceder a esta página
Parece que la página web en https://localhost:7094/Identity/Account/Login?ReturnUrl=%2FIdentity%2FAccount%2FLogin%3FReturnUrl%3D%252FIdentity%252FAccount%252FLogin%253FReturnUrl%253D%25252FIdentity…….etc
La URL se repite infinitamente con más ‘%25F’ cada vez que se repite.
Agregar [AllowAnonymous] a las páginas de inicio de sesión y registro me permite acceder a ellas, pero aún así no puedo registrarme correctamente como nuevo usuario. Después del registro, al hacer clic en el enlace ‘En circunstancias normales, se enviaría por correo electrónico: Haga clic aquí para confirmar su cuenta’, se me redirige a una URL similarmente incorrecta:
https://localhost:7094/Identity/Account/Login?ReturnUrl=%2FIdentity%2FAccount%2FConfirmEmail%3FuserId%3Def48b287-bac4-4b21-afbc-f060e1ba859d%26code%3DQ2ZESjhBS2tOazZqZ1IxSWl3NVdudEJhSUhLckxsY2NMZytON1JSaVlPYkRLOE50ako2THFWOXRIZ2UzVFB4VmxFZ0JUYWQ0djg2TXNLcVpyS3c2VndEcUtNdG5DdkNBdzhnak95TUQ4U25nSTltU2cvRzNzMUt5ZHgvNGd6WjhFdnlYUy85RmMzU2g0VHY3WURhOHl0TVJPay8wbGI1b0JFV3hWcEZNYkQ1S2Q5U1VuNEh6ZlZkOEIrOWFEdGxYQVBWR2hIZjVnaENLditwSjJaWUoyMHNWOHp3VzVIanJ4cnh0NEEwUTNHdjZNNlEyRC9ZdUVORmZZOXM3NVZjeWtvcHIrUT09%26returnUrl%3D%252FIdentity%252FAccount%252FLogout
Esto hace que la columna EmailConfirmed en la base de datos no se establezca en Verdadero y no puedo iniciar sesión como el usuario creado.
¿Alguien tiene alguna idea de qué podría estar causando que la URL se formatee de esta manera? El código de autorización mencionado anteriormente es el único código que agregué al proyecto yo mismo, todo lo demás es predeterminado/generado automáticamente.
davy.ai
Problema con ReturnUrl después de agregar una política de autorización en una aplicación web ASP.NET 6
Descripción del problema
El problema encontrado es que el ReturnUrl no se está formateando correctamente después de agregar una política de autorización en el archivo Program.cs de una aplicación web ASP.NET 6. Al iniciar la aplicación, esto resulta en ser llevado a una URL rota que se repite infinitamente con más ‘%25F’ añadidos cada vez que hace un bucle.
Pasos para reproducir
Para reproducir el problema, siga estos pasos:
Síntomas
Después de seguir los pasos anteriores, al iniciar la aplicación, esto resulta en ser llevado a una URL rota. Además, si se agrega [AllowAnonymous] a las páginas de inicio de sesión y registro, aún no es posible registrar correctamente un nuevo usuario. Después de registrarse, hacer clic en el enlace ‘Por lo general, esto se enviaría por correo electrónico: Haz clic aquí para confirmar tu cuenta’ lleva al usuario a una URL igualmente rota. Esto hace que la columna EmailConfirmed en la base de datos no se establezca en True y el usuario no puede iniciar sesión como el usuario creado.
Solución
El problema es causado por un error en la autenticación de ASP.NET 6.0. Se ha encontrado una solución mediante la adición del siguiente código al archivo Startup.cs dentro del método configure, después de la línea
UseAuthentication();
.Este código verifica el código de estado 401 y redirige al usuario a la página de inicio de sesión si se encuentra.
Agregar este código resuelve el problema con el ReturnUrl que no se está formateando correctamente después de agregar una política de autorización en el archivo Program.cs de una aplicación web ASP.NET 6.
Conclusión
ASP.NET 6.0 tiene un problema conocido con el ReturnUrl que no se está formateando correctamente después de agregar una política de autorización. La solución es agregar el código proporcionado anteriormente al archivo Startup.cs, el cual verifica el código de estado 401 y redirige al usuario a la página de inicio de sesión si se encuentra.