tutorial template net mvc create bootstrap asp asp.net-mvc angularjs asp.net-web-api forms-authentication asp.net-identity

asp.net-mvc - template - mvc c#



AngularJS+ASP.NET Web API+ASP.NET MVC Autenticación (3)

Creo que estás en el camino correcto. Almacenaría los tokens en un Servicio Angular para que sea más fácil para usted ( http://blog.brunoscopelliti.com/deal-with-users-authentication-in-an-angularjs-web-app ). Estoy un poco confundido sobre lo que quiere decir con "AngularJS intenta hacer una llamada a la aplicación MVC de ASP.NET para obtener HTML", no debería tener que proteger la aplicación MVC, simplemente está ejecutando su Angular, ¿verdad? La API es la pieza que desea asegurar también.

Soy nuevo en AngularJS y estoy tratando de evaluarlo para mi nueva aplicación web.

Requisito:

Tendré una API web de ASP.NET que se consumirá desde un Android, un iPhone y también desde una aplicación web (ASP.NET MVC). La identidad de ASP.NET se implementará en la API web. Las tres aplicaciones llamarán al método de inicio de sesión de la API web para obtener el token de autenticación.

Problema:

Mi problema es cómo hacer que la autenticación del lado del servidor de ASP.NET MVC funcione (en sincronización con la API web, de modo que no tenga que iniciar sesión en ASP.NET MVC por separado), mientras que Angular realiza una llamada para obtener la plantilla / vista HTML, los archivos JavaScript u otros recursos. He revisado muchos artículos y blogs en AngularJS pero todavía no puedo encontrar un modelo de seguridad que se ajuste a mis requisitos.

Solución posible:

¿Sería una buena idea hacer la llamada de inicio de sesión a la aplicación MVC de ASP.NET en lugar de la API web directamente, y la aplicación MVC de ASP.NET llamaría a la API web para iniciar sesión y, una vez autenticado, guardar el token de autenticación en la sesión y crear un La cookie FormsAuthentication y en los datos de cookies guardan el token de autenticación cifrado. Además, configure el token de autenticación en ng-init en algún lugar de HTML para que tenga el token en el alcance de AngularJS. Ahora, cuando AngularJS intenta realizar una llamada a la aplicación MVC de ASP.NET para obtener HTML, autentique / autorice al usuario haciendo coincidir los datos descartados de la cookie con los datos de autenticación en la sesión. Además, AngularJS enviará el token de autenticación en el encabezado para llamar a los métodos de la API web directamente para todas las llamadas posteriores para la manipulación de datos a través de la API web.


Resolví el problema con una solución muy estrecha. Acabo de asegurarme de seguir dos líneas de código en el método de Registro de WebApiConfig:

config.SuppressDefaultHostAuthentication(); config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

Eso es. Ahora mis controladores MVC buscan la cookie de sesión para la autorización, mientras que mis controladores de API web buscan el token de autenticación en el encabezado de cada solicitud. Además, la API web envía un token (JSON) y una cookie de sesión en respuesta a la solicitud de inicio de sesión / autenticación, por ejemplo, http://www.mydomain.com/token .

Así que ahora envío mi solicitud de inicio de sesión a la API web para obtener el token y la cookie de sesión. Se enviará automáticamente una cookie de sesión a cada solicitud, por lo que no tengo que preocuparme por la autorización de mis controladores MVC. Para las llamadas a la API web, estoy enviando el token de autenticación en el encabezado de cada solicitud, ya que a los controladores de la API web no les importa que la cookie de sesión se envíe con la solicitud.