Bloqueio de um usuário em um provedor ASP .Net personalizado Membership

votos
6

Eu tive que criar um provedor de associação personalizado para o meu projeto atual ASP .Net, a fim de encaixar com o nosso esquema de banco de dados, e estou tendo problemas configurá-lo para bloquear um usuário se obter a sua senha errada por três vezes, como é apoiada por os fornecedores padrão.

Isto é algo que eu preciso para implementar a mim mesmo, ou deveria ser apoiada inerentemente?

Eu não tenho nenhum código que trata especificamente com ele (e nenhum da interface membros parecem lidar com isso especificamente), mas se eu preciso para implementá-lo eu mesmo, como eu faço para informar o usuário que eles estão bloqueados? Eu preciso levantar algum tipo de exceção em ValidateUser?

Solução

Vergonha Eu não pode marcar duas respostas, os links fornecidos por Dave R dar um grande olhar em profundidade como funciona a adesão, e que Zhaph apontou era exatamente o que eu acabei fazendo, a manipulação da lógica bloqueado no provedor de associação personalizado.

Eu, então, lidou com a condição de erro usando evento LoginError do controle Login e check-in lá para ver se o usuário foi bloqueado, a fim de mostrar a mensagem de erro apropriada.

Publicado 10/12/2008 em 11:17
fonte usuário
Em outras línguas...                            


4 respostas

votos
7

Scott Mitchell escreveu uma excelente série de tutoriais sobre o site ASP.NET. Este link inclui informações sobre como criar um provedor personalizado e discute a lógica de bloqueio:

http://www.asp.net/LEARN/security/tutorial-06-cs.aspx

Também não há método embutido para desbloquear contas (ou seja, você tem que fazer isso através de ferramentas de banco de dados se você estiver usando algo parecido com o SqlMembershipProvider). Scott também escreveu um artigo sobre a criação de uma interface de usuário para gerenciar isso, o que você pode encontrar aqui:

http://www.asp.net/LEARN/security/tutorial-14-vb.aspx

Na verdade, eu recomendo a leitura de toda a série. Scott é um excelente comunicador.

Eu espero que isso ajude.

Respondeu 10/12/2008 em 14:48
fonte usuário

votos
3

Isso é algo que você tem que escrever-se.

O esquema de banco de dados padrão tem as seguintes colunas na tabela aspnet_Membership:

IsLockedOut
FailedPasswordAttemptCount
FailedPasswordAttemptWindowStart

A contagem de tentativa será incrementado em cada tentativa fracassada dentro da janela de tentativa, e o tempo da primeira tentativa falhada é armazenado na coluna início janela, uma vez FailedPasswordAttemptCount iguala os maxInvalidPasswordAttempts da configuração, o IsLockedOut está definido.

Como Michiel estados, o seu método ValidateUser seguida, terá de verificar esses valores com base nas configurações na configuração do provedor - por padrão estes são:

maxInvalidPasswordAttempts="5"
passwordAttemptWindow="10"

Uma vez que o usuário teve as tentativas máximas de login, você vai precisar para assegurar que você tenha definido a MembershipUser.IsLockedOut é definido a partir de seu provedor - você pode então verificar esse valor e se comportar adequadamente - se você estiver usando os controles padrão de login, este valor será provavelmente já ser verificado para você.

Respondeu 10/12/2008 em 14:56
fonte usuário

votos
2

Replicar as condições que levam ao lock-out (muitas tentativas de login errados). Porque provedores de associação fazer uma viagem para o seu back-end de cada vez, é sensato limitar esta abordagem aos prestadores com número razoável de MaxInvalidPasswordAttempts.

if (0 < Membership.MaxInvalidPasswordAttempts && Membership.MaxInvalidPasswordAttempts < 100)
       {
                for(int i = 0; i <= Membership.MaxInvalidPasswordAttempts; i++)
                {
                    Membership.ValidateUser(userName, "jfdlsjflksjlkfjsdlkfjsdl");
                }
        }
Respondeu 14/01/2010 em 13:40
fonte usuário

votos
0

Em seu provedor de associação personalizado, você deve implementar a função ValidateUser. Lá você não só verificar se o nome de usuário ea senha são válidos, mas você também recuperar o número de tentativas inválidas de senha etc de seu armazenamento de dados. Se o nome de usuário / senha é válido, redefinir a contagem de tentativa de senha, otherelse aumentar a contagem de tentativa. O SqlMembershipProvider também armazena a data e hora LastAttempt, então você não pode Bruteforce você maneira, porque você não tem permissão para tentar dentro de um determinado período de tempo.

Respondeu 10/12/2008 em 14:15
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more