Estou criando um aplicativo que será hospedado em um servidor. Quero criar uma API para o aplicativo para facilitar a interação com qualquer plataforma (aplicativo Web, aplicativo móvel). O que eu não entendo é que, ao usar a API REST, como autenticamos o usuário.
Por exemplo, quando um usuário efetuou login e deseja criar um tópico no fórum. Como saberei que o usuário já está logado?
Authorization
cabeçalho + por exemplo, navegador localStorage VSCookie
cabeçalho + armazenamento padrão de cookies do navegador.Respostas:
Você pode usar HTTP Basic ou Digest Authentication. Você pode autenticar com segurança usuários usando SSL na parte superior, no entanto, isso diminui um pouco a API.
OAuth é o melhor que pode obter. As vantagens que o Auth oferece é um token revogável ou expirável. Consulte a seguir como implementar: Link de trabalho dos comentários: https://www.ida.liu.se/~TDP024/labs/hmacarticle.pdf
fonte
Por exemplo, quando um usuário faz login. Agora, digamos que o usuário deseja criar um tópico no fórum, como vou saber se o usuário já está logado?
Pense nisso - deve haver um aperto de mão que informe à API "Criar fórum" que essa solicitação atual é de um usuário autenticado. Como as APIs REST normalmente são sem estado, o estado deve ser persistido algum lugar . Seu cliente que consome as APIs REST é responsável por manter esse estado. Geralmente, é na forma de algum token que é transmitido desde o momento em que o usuário fez login. Se o token for bom, sua solicitação será boa.
Verifique como o Amazon AWS faz autenticações. Esse é um exemplo perfeito de "passar a bola" de uma API para outra.
* Pensei em adicionar alguma resposta prática à minha resposta anterior. Experimente o Apache Shiro (ou qualquer biblioteca de autenticação / autorização). Resumindo, tente evitar a codificação personalizada. Depois de integrar sua biblioteca favorita (eu uso o Apache Shiro, btw), você pode fazer o seguinte:
/api/v1/login
eapi/v1/logout
JSESSIONID
) que é enviado de volta ao cliente (Web, celular, qualquer que seja)/api/v1/findUser
Isso é tudo. Espero que isto ajude.
fonte
Use HTTP Basic Auth para autenticar clientes, mas trate o nome de usuário / senha apenas como um token de sessão temporário .
O token da sessão é apenas um cabeçalho anexado a toda solicitação HTTP, por exemplo:
Authorization: Basic Ym9ic2Vzc2lvbjE6czNjcmV0
A cadeia Ym9ic2Vzc2lvbjE6czNjcmV0 acima é apenas a cadeia "bobsession1: s3cret" (que é um nome de usuário / senha) codificada no Base64.
Para obter o token de sessão temporário acima, forneça uma função de API (por exemplo
http://mycompany.com/apiv1/login
:) que use o nome de usuário mestre e a senha mestre como uma entrada, crie um nome de usuário / senha temporários de autenticação básica HTTP no lado do servidor e retorne o token (por exemplo: Ym9ic2Vzc2lvbjE6czNjcmV0). Esse nome de usuário / senha deve ser temporário e expirar após 20 minutos.Para segurança adicional, verifique se o serviço REST é servido por HTTPS, para que as informações não sejam transferidas em texto sem formatação
Se você estiver em Java, a biblioteca Spring Security fornece um bom suporte para implementar o método acima
fonte
Eu acho que a melhor abordagem é usar o OAuth2. Pesquise no Google e você encontrará muitas postagens úteis para ajudá-lo a configurá-lo.
Facilitará o desenvolvimento de aplicativos clientes para sua API a partir de um aplicativo da web ou móvel.
Espero que ajude você.
fonte
Eu tenho usado a autenticação JWT. Funciona muito bem no meu aplicativo.
Existe um método de autenticação que exigirá as credenciais do usuário. Este método valida as credenciais e retorna um token de acesso em caso de êxito.
Esse token deve ser enviado para todos os outros métodos da minha API da Web no cabeçalho da solicitação.
É muito fácil de implementar e muito fácil de testar.
fonte