example applicationsigninmanager c# .net authentication asp.net-mvc-5 asp.net-identity

applicationsigninmanager - c# summary example



SignInManager, ¿qué es y cómo, cuándo usar? (1)

Descargo de responsabilidad: Estoy confundido por el modelo utilizado en la identidad ASP.NET y lo que digo es mi comprensión de las cosas, que pueden ser inexactas (también podría estar diciendo cosas obvias, por lo que me disculpo). Además, estaba jugando con la identidad de Asp.Net Core recientemente, que es ligeramente diferente en comparación con lo que estaba disponible para Asp.Net 4, así que puedo mezclar las cosas.

Galletas

La identidad ASP.NET opera con dos tipos de cookies: cookie de aplicación y cookie externa. La cookie de aplicación contiene la identidad de su aplicación y es emitida por el administrador de inicio de sesión. La cookie externa contiene identidad de proveedor de autenticación externa y es emitida por middleware de autenticación (como FacebookAuthenticationMiddleware , por ejemplo). Utiliza el administrador de inicio de sesión para consumir la cookie externa y, en su lugar, emitir una cookie de aplicación. Si no utiliza la autenticación externa, no se ocupa de las cookies externas.

Regístrese en el administrador

Clase declarada así:

public class SignInManager<TUser, TKey> : IDisposable where TUser : class, IUser<TKey> where TKey : IEquatable<TKey>

Por lo tanto, puede usar cualquier clase como usuario siempre que implemente la IUser<TKey> . O use IdentityUser como su base si comienza desde cero, que implementa IUser<string> . En el pasado intenté crear una implementación que TKey int como TKey , pero TKey intento después de pasar bastante tiempo intentando que funcionara y sin ver ningún progreso.

Iniciar sesión con contraseña

SignInManager.SignInAsync método SignInManager.SignInAsync emite una cookie de aplicación para el usuario especificado de inmediato sin ninguna comprobación, por lo que si implementa cualquier lógica de autenticación personalizada, es posible que desee usarla (la plantilla MVC asp.net predeterminada lo usa después de registrar al usuario para que no tenga para autenticarse justo después del registro).

SignInManager.PasswordSignInAsync dado el nombre de usuario y la contraseña comprueba su validez y emite la cookie de la aplicación si son correctos.

Inicio de sesión externo

En lugar de hacer que el usuario cree un nombre de usuario y una contraseña para su sitio específicamente, es posible que desee que utilicen algún sitio web externo para autenticarse y pasarle la información de autenticación con OAuth.

Asp.Net Identity tiene una noción de User e Login , donde el User es ... bueno, el usuario (una persona), y el Login es la credencial con la que el User autentica. User puede tener múltiples Login s.

El flujo de OAuth visto desde el sitio web Asp.Net se ve así (basado en el flujo de inicio de sesión predeterminado generado por la plantilla VS):

  1. Usted configura proveedores externos de autenticación (middleware de autenticación) que está dispuesto a aceptar (lo que probablemente implica registrarse en un sitio web externo. Por ejemplo, para usar la autenticación de Facebook, debe crear una aplicación de Facebook, configurar la URL de retorno para señalar su sitio web y configure FacebookAuthenticationMiddleware con ID de aplicación y la aplicación secreta que Facebook le brinda).
  2. Presenta un usuario no autenticado con una selección de proveedores externos que admite.
  3. El usuario elige un proveedor, la elección se envía a su aplicación web Asp.Net
  4. La aplicación web emite un ChallengeResult contiene el nombre del proveedor que se utilizará (esto generalmente ocurre en AccountController.ExternalLogin ), la URL de retorno está configurada para llamar a AccountController.ExternalLoginCallback y el usuario real de la URL de retorno debería estar guardado para más adelante.
  5. El middleware adecuado captura el objeto ChallengeResult y lo convierte en una respuesta de redireccionamiento HTTP que hace que el navegador del usuario vaya al sitio web de un tercero que solicita credenciales al usuario.
  6. El sitio web de la tercera parte luego de una autenticación exitosa redirige al usuario a su sitio web a la URL específica creada por el middleware de autenticación (para Facebook es /signin-facebook IIRC).
  7. El middleware de autenticación intercepta esta llamada, valida los datos pasados ​​por el sitio web de terceros y si todo está bien emite la cookie externa , y lo redirige a lo que se configuró como URL de retorno en el paso 4 (que debe ser AccountController.ExternalLoginCallback ).
  8. En AccountController.ExternalLoginCallback se espera que consuma la cookie externa y emita una cookie de aplicación en su lugar. Eso es lo que hace SignInManager.ExternalSignInAsync : dada la información de inicio de sesión, trata de encontrar al usuario con ese Login . Si lo encuentra, emite una cookie de aplicación; si no lo hace, le informa y debe hacer lo que cree que es correcto cuando recibe un Login desconocido (en general, crea un nuevo usuario en este momento. La implementación predeterminada de la plantilla de VS le pide información adicional en este punto y crea un usuario en AccountController.ExternalLoginConfirmation ). Después de eso, el usuario se redirige a la URL de devolución real "guardada para más tarde" en el paso 4.

Almacenamiento personalizado

Hasta ahora no he tenido éxito al crear almacenamiento personalizado para Asp.Net Identity. Por lo general, implica implementar su propia clase de administrador de usuarios descendiendo el UserManager<TUser, TKey> y la clase de almacenamiento que implementa un conjunto de interfaces como IUserStore<TUser, TKey> , IUserRoleStore<TUser, TKey> , etc.

Estoy explorando la clase SignInManager. Pero la información proporcionada en MSDN es muy inútil. Solo dice cuáles son los métodos y las propiedades proporcionados.

Lo que estoy buscando es,

1) ¿Qué es SignInManager? 2) ¿Cómo usarlo? 3) Y tengo mi propia base de datos que contiene información relacionada con credenciales (nombre de usuario y contraseñas)

¿Cómo puedo usar SignInmanager y cómo usarlo para que mi base de datos personalizada se utilice para autenticar usuarios?

Estoy usando asp.net MVC 5 y Visual Studio 2015. En mi proyecto de ejemplo tengo un controlador de cuentas que contiene métodos de acción como

public async Task<ActionResult> ExternalLoginCallback(string returnUrl)

Pero no tengo idea de cómo usarlo, MSDN es completamente inútil para proporcionar información sobre esto. Cualquier enlace útil que lo explique en detalle porque no tengo idea de qué es SignInManager y para qué sirve.

Gracias