Quando uma API exige que um cliente se autentique, eu vi dois cenários diferentes usados e fico imaginando qual caso devo usar para a minha situação.
Exemplo 1. Uma API é oferecida por uma empresa para permitir que terceiros se autentiquem com um token e um segredo usando HTTP Basic.
Exemplo 2. Uma API aceita um nome de usuário e senha via HTTP Basic para autenticar um usuário final. Geralmente, eles recebem um token de volta para solicitações futuras.
Minha configuração: terei uma API JSON usada como back-end para um aplicativo móvel e da web. Parece uma boa prática para o aplicativo móvel e da Web enviar um token e um segredo para que apenas esses dois aplicativos possam acessar a API bloqueando qualquer outro terceiro.
Mas o aplicativo móvel e da web permite que os usuários efetuem login e enviem postagens, visualizem seus dados etc. Então, eu gostaria que eles acessassem via HTTP Basic, bem como em cada solicitação.
De alguma forma, uso uma combinação desses dois métodos ou apenas envio as credenciais do usuário final (nome de usuário e token) em cada solicitação? Se eu enviar apenas as credenciais do usuário final, eu as armazeno em um cookie no cliente?
fonte
Respostas:
A autenticação básica HTTP requer que o nome de usuário e a senha sejam enviados a cada solicitação de recurso. O nome de usuário: senha é passado no cabeçalho da solicitação "Autorização", sequência codificada em base64, prefixada com "Básico". Se toda a sua comunicação http estiver criptografada (via ssl), as informações do cabeçalho da Autorização não poderão ser usadas com facilidade pelos invasores, pois é improvável que eles consigam obtê-la.
HTTP criptografado em SSL com autenticação básica deve ser suficiente.
fonte
O Outh / OpenID pode funcionar junto com token / segredo?
Recentemente, contemplei o seguinte cenário:
Como um teste simples, eu pude:
Isso permitiria que o aplicativo de dispositivo móvel se autenticasse com as mesmas credenciais do Front-end da Web (a mesma conta) e também autorizasse o acesso à API.
fonte