У меня есть простая схема аутентификации для набора полуобщественных REST API, которые мы создаем:
/-----------------------\
| Client POST's ID/Pass |
| to an Auth Service |
\-----------------------/
[Client] ------------POST----------------------> [Service/Authenticate]
|
/-------------------------------\
| Service checks credentials |
[Client] <---------Session Cookie------- | and generates a session token |
| | in a cookie. |
| \-------------------------------/
|
[Client] -----------GET /w Cookie -------------> [Service/Something]
|
/----------------------------------\
| Client must pass session cookie |
| with each API request |
| or will get a 401. |
\----------------------------------/
Это работает хорошо, потому что клиенту никогда не нужно ничего делать, кроме как получить cookie, а затем передать его. Для браузерных приложений это происходит автоматически браузером, для не браузерных приложений довольно просто сохранить куки и отправлять его с каждым запросом.
Однако я не нашел хорошего подхода для первоначального рукопожатия из браузерных приложений. Например, если все это происходит с использованием техники AJAX, что мешает пользователю получить доступ к идентификатору / паролю, который клиент использует для рукопожатия со службой?
Похоже, что это единственный камень преткновения в этом подходе, и я в замешательстве.