Estou construindo um aplicativo Web e um serviço Web RESTful.
Eu tenho lido vários artigos sobre a melhor maneira de autenticar as solicitações para o serviço da web.
A melhor opção para mim parece ser usar a autenticação básica HTTP. Praticamente toda leitura de artigo diz que a autenticação deve ser criptografada em SSL ou equivalente.
Não tenho muita certeza do que isso envolve. Isso significa que todo o meu serviço web terá que estar em um servidor seguro? Isso vai desacelerar as coisas?
web-services
rest
authentication
ssl
https
Gaz_Edge
fonte
fonte
Respostas:
Primeiro, tente entender como a autenticação SSL (HTTPS) e HTTP funciona.
Os métodos de autenticação HTTP usuais (Digest, Basic e qualquer esquema de autenticação baseado em cookies e formulários que você possa implementar sobre HTTP) são todos inseguros por si próprios, porque enviam informações de autenticação mais ou menos em texto não criptografado. Se os dados estão em campos ou cabeçalhos POST e se a codificação base64 é aplicada, não importa a esse respeito, a senha é claramente visível para qualquer pessoa com acesso ao tráfego de rede. Isso significa que a autenticação HTTP em um canal não confiável não vale nada: basta que um invasor leia sua senha é um pouco de cheirar a rede.
O SSL implementa um canal de comunicação seguro em um canal inerentemente inseguro. Isso funciona, grosso modo, da seguinte maneira:
Observe alguns pontos importantes aqui:
Então, obviamente, há alguma sobrecarga envolvida, mas não é tão ruim quanto você pensa - é principalmente na escala em que "jogar mais hardware" é a resposta apropriada, a menos que você esteja se preparando para quantidades absolutamente enormes de tráfego ( pense no Google ou no Facebook). Em circunstâncias normais, ou seja, no uso típico de aplicativos da Web, a sobrecarga do SSL é desprezível e, consequentemente, assim que você tiver dados confidenciais, é melhor executar tudo em SSL, incluindo recursos. SSL também é a única maneira viável de proteger o tráfego HTTP; outros métodos simplesmente não são tão padronizados e, portanto, não são amplamente suportados, e você absolutamente não deseja implementar essas coisas sozinho, porque, honestamente, é muito fácil cometer erros.
TL; DR: Sim, a autenticação básica SSL + é uma boa ideia, sim, você precisa de um servidor seguro (e um certificado válido ); sim, isso atrasará um pouco as coisas, mas não, isso não é algo para se preocupar corretamente agora.
fonte
HTTPS (SSL) não é autenticação de usuário FYI. Ele apenas fornece criptografia entre 2 pontos de extremidade.
Mas sim, há um pouquinho de sobrecarga dele (embora não seja suficiente para justificar uma alteração nos planos / hardware). Veja aqui :
/programming/548029/how-much-overhead-does-ssl-impose
fonte
Com a autenticação básica HTTP, o nome de usuário e a senha que o usuário fornece são enviados com todas as solicitações ao servidor. Isso significa que eles estão em texto simples, mesmo em áreas do seu site que não precisam necessariamente ser seguras. Obviamente, você desejará SSL aqui para manter seus usuários seguros.
Em teoria, você pode usar a autenticação de cookies e colocar apenas SSL na página de login (para onde o nome de usuário e a senha são enviados). Se seus cookies forem decentemente seguros e protegidos contra ataques de repetição, um invasor não poderá fazer nada com eles, mesmo que eles tenham conseguido obter um.
fonte
A autenticação básica está configurando um nome de usuário e senha no cabeçalho da solicitação http. Se você não usa SSL ou equivalente, esse nome de usuário e senha são enviados em texto sem formatação e são triviais para qualquer pessoa roubar.
Atualmente, a maioria dos servidores da Web suporta HTTPS pronto para uso e, apesar de adicionar sobrecarga a todas as chamadas, essa sobrecarga é mínima.
Você pode proteger alguns pontos de extremidade e não outros (ou seja, ter um ponto de extremidade autenticado que produza um token que pode ser usado para outras chamadas). Eu recomendaria fortemente o SSL para todo o serviço, embora seja muito mais seguro. (se nada mais impedir que dados confidenciais sejam interceptados)
fonte
Jeff Atwood escreveu um breve post no blog há não muito tempo atrás sobre se a criptografia completa é o caminho a percorrer. Ele descreve alguns exemplos do mundo real e também tem algumas linhas sobre considerações de desempenho.
Além disso, ele faz referência a este artigo sobre um estudo de caso do Gmail, citando o seguinte:
Ele também menciona algumas melhorias então recentes no cache de páginas do lado do cliente através de HTTPS pelo navegador .
Apesar disso, ele ressalta, existem outras penalidades, a maioria delas não sendo de desempenho, mas de custos de implementação:
fonte
A autenticação básica HTTP sem o seu próprio tratamento de sessão provavelmente o deixará aberto a ataques de falsificação de solicitação entre sites. Provavelmente, você pode usá-lo se associar à sua própria manipulação de sessão, mas pode ter problemas para fornecer uma função limpa de "logout".
Não importa o que você usa para autenticação, você precisará usar HTTPS para criptografar a conexão (a menos que o aplicativo da Web seja acessado apenas em uma rede segura e controlada). Isso pode tornar as coisas um pouco mais lentas (os estabelecimentos de conexão são caros, mas os navegadores tendem a manter as conexões por um tempo), mas se você quiser um aplicativo seguro, não poderá evitá-lo de qualquer maneira, para não precisar realmente se preocupar com isso.
Nota: "A autenticação HTTPS" (mencionada no título) é enganosa - pode se referir à autenticação de certificado de cliente SSL, que tem pouco a ver com o texto da sua pergunta e possui seu próprio conjunto de benefícios e problemas. Você provavelmente não quer tocar nisso.
fonte
Como você vai conseguir a autenticação básica?
Se for um nome de usuário / senha codificado e você estiver usando a funcionalidade incorporada do servidor da Web para fazer isso, provavelmente terá um impacto quase nulo. Se você estiver fazendo coisas loucas em um banco de dados ou algo semelhante, sim, pode haver um impacto.
Como outros já observaram aqui, o SSL e o envio de cabeçalhos extras tecnicamente tornarão as coisas mais lentas, mas não serão significativas de forma alguma.
fonte