Protocolos de autenticação de websites
Os sistemas de autenticação são a espinha dorsal de muitos websites. Ele permite que os usuários façam login no seu site e preservem os dados entre as visitas. É crucial para oferecer uma experiência de usuário robusta que recompensa seus usuários por fornecer seus detalhes. As autenticações fornecem frequentemente acesso a dados pessoais privados que, se tornados públicos, podem prejudicar o seu utilizador. Para prevenir isto, foram criados protocolos de autenticação para proteger os pedidos enquanto permite que os usuários ainda se conectem ao seu sistema com segurança a partir de qualquer ambiente.
Basic SSL Auth
Basic auth é a forma mais simples de autenticação web. Ele utiliza cabeçalhos HTTP padrão no lugar de soluções mais complicadas que dependem de cookies, identificadores de sessão e páginas de login. Há muito pouca segurança embutida no sistema auth básico. As credenciais são transmitidas apenas com a codificação Base64 e não são criptografadas ou hashed. Devido às inseguranças arraigadas no sistema, estas requisições são mais freqüentemente feitas via HTTPS.
As informações de autorização devem ser compiladas no seguinte formato e incluídas no cabeçalho:
Formato:
<!--Authorization: Basic -->
Pormenores completos sobre o protocolo de Autenticação Básica podem ser encontrados aqui: http://www.w3.org/Protocols/HTTP/1.0/spec.html#AA
Digest Auth
Digest Auth funciona similar à autenticação SSL básica, com a exceção de que a senha é criptografada usando um hash unidirecional. Ele utiliza hash criptográfico MD5 com um nonce(um valor gerado pelo servidor que impede ataques de replay).
O fluxo típico de uma requisição do Digest Auth é :
- Um usuário navega para uma página que requer que o usuário seja autenticado.
- O servidor responde com uma mensagem 401 que significa que um usuário não está atualmente autorizado a acessar o conteúdo. Na resposta também inclui o nonce que será usado durante a autorização para evitar ataques de replay,
- O site então exibe uma interface de autenticação para reunir os detalhes necessários( nome de usuário e senha )
- Os detalhes fornecidos são reenviados para o servidor com um cabeçalho de autenticação incluído na solicitação que tem um código de resposta.
- O servidor verifica as credenciais fornecidas e aceita a autenticação ou retorna uma mensagem 401 se as credenciais estiverem incorretas, o que faria com que o usuário fosse novamente solicitado com a interface de autenticação.
Você pode encontrar detalhes completos sobre o protocolo Digest Auth aqui: https://www.ietf.org/rfc/rfc2617.txt
OAuth 1.0
O protocolo OAuth 1.0 depende de ter um segredo compartilhado entre o servidor e o site. Este segredo compartilhado é usado para gerar uma assinatura que é incluída no pedido. A assinatura gerada é usada para verificar no lado do servidor a validade do pedido de autenticação. O processo para autorizar o usuário é geralmente tratado em três passos( 3-legged OAuth):
- Site obtém o Token de Pedido.
- Usuário autoriza o Token de Pedido.
- Site troca o Token de Pedido por Token de Acesso.
O processo de completar um pedido OAuth de 3 pernas será geralmente tratado da seguinte forma:
-
O site irá enviar um pedido assinado para o Token de Pedido. Este pedido deve conter os seguintes parâmetros:
- auth_consumer_key
- oauth_timestamp
- oauth_nonce
- oauth_signature
- oauth_signature_method
- oauth_version
- oauth_callback
Este pedido será validado no servidor e se validado retornará o token do pedido no seguinte formato:
- oauth_token
- oauth_token_secret
- e quaisquer outros parâmetros adicionais devolvidos pelo seu servidor.
- O próximo passo após recuperar o token de requisição é solicitar ao seu utilizador que introduza as suas credenciais de login. Estas são então formatadas em uma assinatura com o oauth_token request token e enviadas com um pedido de volta para o servidor para validação. Após validação bem sucedida deste pedido o servidor irá retornar o seguinte:
- oauth_token
- oauth_verifier
Estes serão usados no próximo passo para recuperar um token de acesso.
- O passo final é trocar os detalhes recuperados do passo 2 por um token de acesso , que será usado para acessar os recursos do servidor. Para trocar o token do seu pedido por um token de acesso, você pode fazer um pedido ao servidor com o seguinte pedido assinado
- oauth_token – retornado do passo 2
- oauth_consumer_key
- oauth_nonce
- oauth_signature
- oauth_signature_method
- oauth_version
- oauth_verifier -retornado do passo 2
Isto lhe retornará um token de acesso para ser usado em conjunto com seu segredo, a fim de fazer pedidos de informação a partir do servidor.
Você pode encontrar detalhes completos sobre o protocolo OAuth 1.0 aqui: https://tools.ietf.org/html/rfc5849
OAuth 2.0
Este é similar ao protocolo OAuth 1.0, ele depende de uma identificação e segredo do cliente para formatar o pedido, mas simplifica muito do complicado processo de assinatura que é inerente ao sistema OAuth 1.0. O processo de autorização de um usuário usando o OAuth 2 de 3 pernas.0 é o seguinte:
-
O usuário é direcionado ao serviço para autorização com os seguintes detalhes incluídos na URL de autorização:
- client_id
- redirect_uri
- response_type
- scope
-
Usuário autenticar-se-ia então com o serviço e garantiria o acesso da aplicação aos seus detalhes. Na autenticação bem sucedida o usuário é redirecionado de volta para o redirect_uri com os seguintes parâmetros:
- code
- state
-
O código retornado no passo 2 é então usado pela aplicação para fazer um pedido para um token de acesso. Incluído neste pedido deve ser:
- client_id
- client_secret
- code
- redirect_uri
- grant_type – Este deve ser definido como “authorization_code”
O servidor irá verificar estes detalhes e depois devolver um token de acesso com um tempo de expiração se eles forem válidos. Estes são geralmente devolvidos no seguinte formato:
- access_token
- expires_in
- refresh_token
Você pode encontrar detalhes completos sobre o protocolo OAuth 2.0 aqui: http://oauth.net/2/
Protocolos de autenticação permitem-lhe proteger os seus dados com diferentes níveis de segurança. Dependendo dos dados acessados e do seu nível de segurança desejado, implementar um dos protocolos acima permite que você esteja confiante de que seus dados estão seguros e que só sejam acessados por usuários permitidos ao seu sistema.