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):
- 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). - Presenta un usuario no autenticado con una selección de proveedores externos que admite.
- El usuario elige un proveedor, la elección se envía a su aplicación web Asp.Net
- La aplicación web emite un
ChallengeResult
contiene el nombre del proveedor que se utilizará (esto generalmente ocurre enAccountController.ExternalLogin
), la URL de retorno está configurada para llamar aAccountController.ExternalLoginCallback
y el usuario real de la URL de retorno debería estar guardado para más adelante. - 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. - 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). - 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
). - En
AccountController.ExternalLoginCallback
se espera que consuma la cookie externa y emita una cookie de aplicación en su lugar. Eso es lo que haceSignInManager.ExternalSignInAsync
: dada la información de inicio de sesión, trata de encontrar al usuario con eseLogin
. 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 unLogin
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 enAccountController.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