Vamos imaginar um cenário real onde tenho um diretório chamado admin dentro do meu
Web Space (local do meu servidor web onde ficam os arquivos acessíveis ao público) do
Apache já instalado, no
Debian Lenny Linux o diretório do Web Space do Apache fica em:
/var/www/
No caso do nosso cenário do exemplo, teria uma pasta admin dentro deste diretório, ficando assim:
/var/www/admin
Imaginem que esta pasta armazena coisas muito importantes e você não quer que nenhum abelhudo vá lá xeretar sem autorização, aí aplicamos autenticação neste diretório. Pra quem não sabe, autenticação nada mais é do que um serviço que pedirá usuário mais senha para liberar seu conteúdo, ou seja, logar! Portando somente um ou alguns usuários estarão liberados para ler os arquivos deste diretório (admin no caso do exemplo).
No
HTTP a autenticação funciona da seguinte forma (vamos exemplificar isso usando o programa wireshark para sniffar as mensagens trocadas entre um servidor e um cliente):
O cliente faz uma requisição de determinada página via mensagens, a mensagem de requisição inicial do nosso exemplo será:
GET /admin HTTP/1.1
Host: 172.16.213.128
Esta mensagem do cliente significa que estou requisitando os objetos do diretório /admin do servidor web de ip 172.16.231.128, quando o diretório exige autenticação, o servidor responderá da seguinte forma:
HTTP/1.1 401 Authorization Required
Date: Wed, 03 Jun 2009 11:54:31 GMT
Server: Apache
WWW-Authenticate: Basic realm="Digite seu usuário e senha"
Esta mensagem informa ao cliente que ele precisa de autenticação, isto é, informado na linha de cabeçalho WWW-Authenticate e o Basic Realm é apenas um comentário que aparecerá ao usuário pedindo a senha.
Daí novamente o cliente fará uma requisição para o servidor, mas desta vez acrescentará a senha em formato criptografado (*Base64) dentro de uma linha de cabeçalho chamada Authorization como mostrado abaixo:
GET /admin HTTP/1.1
Host: 172.16.213.128
Authorization: Basic cm9vdDoxMjM0
Se o usuário casar com a senha, o servidor apresentará o conteúdo do diretório na tela do browser do cliente, caso não, a resposta do servidor será novamente uma requisição de senha (enquanto o usuário não clicar em cancelar e digitar a senha errada o servidor pedirá uma nova senha, quando ele clicar em cancelar a resposta do servidor será HTTP UNAUTHORIZED).