Observando a identidade do ASP.NET (nova implementação de associação no ASP.NET), deparei-me com essa interface ao implementar minha própria 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
é implementado pelo padrão EntityFramework.UserStore<TUser>
que essencialmente obtém e define a TUser.SecurityStamp
propriedade
Depois de mais algumas pesquisas, parece que a SecurityStamp
é Guid
gerado recentemente em pontos-chave do UserManager
(por exemplo, alteração de senhas).
Não consigo decifrar muito além disso, pois estou examinando esse código no Reflector . Quase todas as informações de símbolos e assinaturas foram otimizadas.
Além disso, o Google não tem sido de muita ajuda.
As perguntas são:
- O que é uma
SecurityStamp
identidade no ASP.NET e para que é usada? - O
SecurityStamp
papel desempenha algum papel quando os cookies de autenticação são criados? - Existem ramificações ou precauções de segurança que precisam ser tomadas com isso? Por exemplo, não envie esse valor a jusante para os clientes?
Atualização (16/9/2014)
Código fonte disponível aqui:
asp.net
asp.net-mvc
asp.net-mvc-5
asp.net-identity
Brian Chavez
fonte
fonte
Respostas:
Isso significa representar o instantâneo atual das credenciais do usuário. Portanto, se nada mudar, o carimbo permanecerá o mesmo. Mas se a senha do usuário for alterada ou um login for removido (desvincular sua conta do google / fb), o carimbo será alterado. Isso é necessário para coisas como assinar automaticamente usuários / rejeitar cookies antigos quando isso ocorre, que é um recurso que vem na versão 2.0.
A identidade ainda não é de código aberto, ainda está em andamento.
Edit: Atualizado para 2.0.0. Portanto, o objetivo principal do
SecurityStamp
é ativar o logout em qualquer lugar. A idéia básica é que sempre que algo relacionado à segurança for alterado no usuário, como uma senha, é uma boa idéia invalidar automaticamente qualquer cookie de login existente; portanto, se sua senha / conta foi comprometida anteriormente, o invasor não terá mais acesso.Na 2.0.0, adicionamos a seguinte configuração para conectar o
OnValidateIdentity
métodoCookieMiddleware
ao examinarSecurityStamp
e rejeitar cookies quando ele foi alterado. Ele também atualiza automaticamente as reivindicações do usuário do banco de dados semprerefreshInterval
que o carimbo for inalterado (que cuida de coisas como mudar de função etc.)Se seu aplicativo deseja acionar esse comportamento explicitamente, ele pode chamar:
fonte
UseCookieAuthentication
está obsoleto até agora. Eu consegui configurá-lo usandoservices.Configure<SecurityStampValidatorOptions>(o => o.ValidationInterval = TimeSpan.FromSeconds(10));
.A UseCookieAuthentication está obsoleta agora. Eu consegui configurá-lo usando
Movido da resposta para responder por solicitação .
fonte
Observei que o SecurityStamp era necessário para a verificação do token.
Para repo: Definir SecurityStamp como nulo no banco de dados Gerar um token (funciona ok) Verificar token (falhar)
fonte