tutorial microsoft management deploy app asp.net-mvc azure

asp.net mvc - microsoft - OWIN-Authentication.SignOut() no elimina las cookies



panel azure login (1)

Tengo una aplicación web MVC en Azure con autenticación AD. Cuando ejecuto el sitio web localmente, inicia y cierra sesión perfectamente, utilizando Azure AD. Pero el registro en mi sitio web Azure implementado no funciona. El usuario permanece autenticado, por lo que la acción SignOutCallback siempre redirige a Inicio / Índice.

Este es un código out-of-the-box que se creó cuando creé el proyecto.

public class AccountController : Controller { /// <summary> /// Use this method to sign into the website /// </summary> public void SignIn() { // Send an OpenID Connect sign-in request. if (!Request.IsAuthenticated) { HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/" }, OpenIdConnectAuthenticationDefaults.AuthenticationType); } } /// <summary> /// Use this method to sign out of the website /// </summary> public void SignOut() { string callbackUrl = Url.Action("SignOutCallback", "Account", routeValues: null, protocol: Request.Url.Scheme); Request.GetOwinContext().Authentication.SignOut( new AuthenticationProperties { RedirectUri = callbackUrl }, OpenIdConnectAuthenticationDefaults.AuthenticationType, CookieAuthenticationDefaults.AuthenticationType); } /// <summary> /// Use this method to redirect to Home page, once the request has been authenticated /// </summary> /// <returns>An <see cref="ActionResult"/> object.</returns> public ActionResult SignOutCallback() { if (Request.IsAuthenticated) { // Redirect to home page if the user is authenticated. return RedirectToAction("Index", "Home"); } return View(); } }

Encontré una publicación aquí con problemas similares y he intentado con lo sugerido, pero no funcionó.

¿Alguien más se ha encontrado con este problema?


Ya descubrí cuál es el problema. La aplicación web MVC lista para usar en Azure con autenticación AD que creé utiliza las cookies AspNet . Que GetOwinContext (). Authentication.SignOut borra. Y esto estaba funcionando bien para mí en localhost. El problema surgió cuando lo implementé en Azure y luego configuré el sitio web en el nuevo portal de Azure para usar la autenticación AD. Parece convertir el sitio web en un Azure App Service . Ahora las cookies son cookies de AppServiceAuthSession , ya no son las cookies de AspNet . Por lo tanto, el cierre de sesión ya no funciona.

Aquí está la respuesta del representante de Microsoft con la que trabajé en esto:

Investigué un poco más sobre esto y hablé tanto con los equipos de Azure AD como con Azure Websites. Aparentemente, esa nueva configuración del portal se ocupa de todos los componentes de autenticación para usted. Entonces, realmente tiene dos enfoques para configurar Auzre AD auth contra su sitio web. Puedes hacerlo a través de un código como el que ves en ese proyecto ASP.NET MVC Out of the Box, donde tienes acceso al AccountController.

O el otro enfoque es dejar que Azure lo maneje por usted habilitando esa configuración en el nuevo portal de Azure. Cuando permite que el nuevo portal de Azure lo haga, utiliza un nombre de cookie de sesión diferente y una lógica de cierre de sesión diferente. Parece que la autenticación automática no funciona bien con la lógica de cierre de sesión codificada.

Entonces su solución es correcta. Básicamente, tiene dos soluciones para que una aplicación MVC se ejecute y admita la autenticación de Azure AD:

  1. Crea una aplicación MVC que admita la autenticación AAD a través del código. Agregue manualmente la aplicación a la lista de aplicaciones del inquilino de Azure AD para configurar la confianza. Controle el inicio / cierre de sesión a través del código en su aplicación MVC
  2. Crea una aplicación MVC que no tenga ninguna lógica de autenticación. Configúrelo para admitir la autenticación de Azure AD a través del nuevo portal. Agregue algunos enlaces específicos para iniciar y cerrar sesión. Para este segundo escenario, le recomiendo que despliegue y juegue con la muestra aquí: https://github.com/btardif/Websites-Authentication-Authorization . La muestra que puede ver admite un enlace de Cerrar sesión, pero se conecta a la nueva configuración de Autenticación / Autorización en ese nuevo portal. Implemente esa muestra en un nuevo sitio web, habilite la configuración de autenticación en el nuevo portal y verá que el inicio de sesión funciona y borra correctamente esas cookies de sesión de autenticación.