Qual é a diferença entre a Autenticação Digest e a Autenticação Básica, exceto o envio de credenciais como texto simples?
Qual é a diferença entre a Autenticação Digest e a Autenticação Básica, exceto o envio de credenciais como texto simples?
Respostas:
A principal diferença é que não requer o envio do nome de usuário e da senha em texto simples. Ele também é imune a ataques de repetição, pois usa um número único do servidor.
O servidor fornece ao cliente um número de uso único (um nonce) que combina com o nome de usuário, domínio, senha e a solicitação de URI. O cliente executa todos esses campos por meio de um método de hashing MD5 para produzir uma chave hash.
Ele envia essa chave hash para o servidor junto com o nome de usuário e o realm para tentar autenticar.
Do lado do servidor, o mesmo método é usado para gerar uma chave de hash, mas em vez de usar a senha digitada no navegador, o servidor procura a senha esperada para o usuário no banco de dados do usuário. Ele procura a senha armazenada para este nome de usuário, executa o mesmo algoritmo e compara com o que o cliente enviou. Se corresponderem, o acesso é concedido; caso contrário, pode enviar de volta um 401 Não autorizado (nenhum login ou login com falha) ou um 403 Proibido (acesso negado).
A autenticação Digest é padronizada em RFC2617 . Há uma boa visão geral disso na Wikipedia :
Você pode pensar assim:
Um hash das credenciais é enviado pela rede.
HA1 = MD5(username:realm:password)
A única maneira de obter o hash HA1 das credenciais é saber a senha. O servidor conhece HA1, mas não a senha que o gerou. Se HA1 fosse conhecido por um invasor, ele poderia entrar no sistema. Portanto, não é enviado pelo fio. Um hash adicional baseado em nonce, etc. é feito antes de fazer isso, e deve concordar com um cálculo semelhante feito no servidor. Portanto, enquanto o servidor mantiver HA1 privado, o sistema estará seguro.