Pois é galera, vi ser mencionado o oAuth como opção. Acontece que as implementações de oAuth que vi sempre resolvem o problema de autenticação onde existem 3 envolvidos.
1 - Um provedor de informação, por exemplo, um site que armazena fotos.
2 - Um consumidor de serviço, por exemplo, um site que deseja buscar fotos no provedor de informação, por exemplo, buscar fotos.
3 - O usuário que é dono da informação no site provedor, por exemplo, um usuário que tem as fotos armazenadas no site que armazena fotos.
Daí ocorre a chamada “Dance” no jargão oAuth, onde o usuário autoriza o consumidor de serviços a utilizar os dados no provedor em seu nome.
Existem outros cenários, por exemplo, quando você aceita que um site utilize sua conta do Google ou Facebook para se autenticar neste site, geralmente é feito com oAuth também. No oAuth 2, existe um outro modelo chamado de 2-legged que, pelo que entendi, serviria para autenticação simples entre usuário e site de serviços diretamente.
O fato é, quando temos um implementação REST, estamos dispostos a entregar recursos / estados armazenados em um servidor para qualquer cliente que chame por uma URL / verbo HTTP. Não podemos partir da premissa que temos um browser do outro lado, pode ser por exemplo, um cliente mobile, uma aplicação nativa em iOS ou Android, que não suporta uso de cookies e JSESSIONIDS da vida.
A questão continua aberta, como tratar a autenticação e manutenção desta autenticação entre requests, em um modelo REST de desenvolvimento?