Al observar la identidad de ASP.NET (nueva implementación de membresía en ASP.NET), me encontré con esta interfaz al implementar la mía propia UserStore
:
//Microsoft.AspNet.Identity.Core.dll
namespace Microsoft.AspNet.Identity
{
public interface IUserSecurityStampStore<TUser> :
{
// Methods
Task<string> GetSecurityStampAsync(TUser user);
Task SetSecurityStampAsync(TUser user, string stamp);
}
}
IUserSecurityStampStore
se implementa por defecto EntityFramework.UserStore<TUser>
que esencialmente obtiene y establece la TUser.SecurityStamp
propiedad.
Después de un poco más de excavación, parece que a SecurityStamp
es una Guid
nueva generación en puntos clave de UserManager
(por ejemplo, cambiar las contraseñas).
Realmente no puedo descifrar mucho más allá de esto ya que estoy examinando este código en Reflector . Casi toda la información de símbolos y asíncronos se ha optimizado.
Además, Google no ha sido de mucha ayuda.
Las preguntas son:
- ¿Qué es una
SecurityStamp
identidad ASP.NET y para qué se utiliza? - ¿
SecurityStamp
Juega algún papel cuando se crean las cookies de autenticación? - ¿Hay alguna ramificación de seguridad o precaución que deba tomarse con esto? Por ejemplo, ¿no envía este valor en sentido descendente a los clientes?
Actualización (16/09/2014)
Código fuente disponible aquí:
asp.net
asp.net-mvc
asp.net-mvc-5
asp.net-identity
Brian Chavez
fuente
fuente
Respuestas:
Esto está destinado a representar la instantánea actual de las credenciales de su usuario. Entonces, si nada cambia, el sello permanecerá igual. Pero si se cambia la contraseña del usuario, o si se elimina un inicio de sesión (desvincula su cuenta de google / fb), el sello cambiará. Esto es necesario para cosas como firmar automáticamente usuarios / rechazar cookies antiguas cuando esto ocurre, que es una característica que viene en 2.0.
La identidad aún no es de código abierto, todavía está en proceso.
Editar: actualizado para 2.0.0. Por lo tanto, el objetivo principal de la
SecurityStamp
es permitir cerrar sesión en todas partes. La idea básica es que siempre que se cambie algo relacionado con la seguridad en el usuario, como una contraseña, es una buena idea invalidar automáticamente cualquier cookie de inicio de sesión existente, por lo que si su contraseña / cuenta se vio comprometida anteriormente, el atacante ya no tiene acceso.En 2.0.0, agregamos la siguiente configuración para enganchar el
OnValidateIdentity
métodoCookieMiddleware
para mirarSecurityStamp
y rechazar las cookies cuando ha cambiado. También actualiza automáticamente los reclamos del usuario de la base de datos cada vezrefreshInterval
que el sello no se modifica (lo que se ocupa de cosas como el cambio de roles, etc.)Si su aplicación quiere activar este comportamiento explícitamente, puede llamar a:
fuente
UseCookieAuthentication
está en desuso . Logré configurarlo usandoservices.Configure<SecurityStampValidatorOptions>(o => o.ValidationInterval = TimeSpan.FromSeconds(10));
.El UseCookieAuthentication está en desuso por ahora. Logré configurarlo usando
Movido de respuesta a respuesta por solicitud .
fuente
Observé que se requiere SecurityStamp para la verificación del token.
Para repositorio: establezca SecurityStamp en nulo en la base de datos Genere un token (funciona bien) Verifique el token (falla)
fuente