Articles

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 é :

  1. Um usuário navega para uma página que requer que o usuário seja autenticado.
  2. 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,
  3. O site então exibe uma interface de autenticação para reunir os detalhes necessários( nome de usuário e senha )
  4. 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.
  5. 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):

  1. Site obtém o Token de Pedido.
  2. Usuário autoriza o Token de Pedido.
  3. 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:

  1. O site irá enviar um pedido assinado para o Token de Pedido. Este pedido deve conter os seguintes parâmetros:

    1. auth_consumer_key
    2. oauth_timestamp
    3. oauth_nonce
    4. oauth_signature
    5. oauth_signature_method
    6. oauth_version
    7. oauth_callback

Este pedido será validado no servidor e se validado retornará o token do pedido no seguinte formato:

  1. oauth_token
  2. oauth_token_secret
  3. e quaisquer outros parâmetros adicionais devolvidos pelo seu servidor.
  4. 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:
  5. oauth_token
  6. oauth_verifier

Estes serão usados no próximo passo para recuperar um token de acesso.

  1. 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
  2. oauth_token – retornado do passo 2
  3. oauth_consumer_key
  4. oauth_nonce
  5. oauth_signature
  6. oauth_signature_method
  7. oauth_version
  8. 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:

  1. O usuário é direcionado ao serviço para autorização com os seguintes detalhes incluídos na URL de autorização:

    1. client_id
    2. redirect_uri
    3. response_type
    4. scope
  2. 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:

    1. code
    2. state
  3. 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:

    1. client_id
    2. client_secret
    3. code
    4. redirect_uri
    5. 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:

  1. access_token
  2. expires_in
  3. 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.