Я пытаюсь разработать сервер ресурсов и, основываясь на том, что я могу читать онлайн, я пришел к выводу, что лучше разделить сторону аутентификации и сторону ресурсов.Теперь у меня есть сервер для аутентификации со следующими конечными точками
· https: authserver / register /*saves the email+hash(password) on a db*/
· https: authserver / login /*creates a session en a db and returns a session id in the cookies {secure, httpOnly}*/
· https: authserver / logout /*deletes the session*/
· https: authserver / check /*given a session id returns if the session is valid*/
(authserver управляет базой данных, где сохраняются сеансы и учетные данные пользователя)
Идля сервера ресурсов у меня есть
· https: resourceserver / register /*saves email+name+birdthday+etc*/
· https: resourceserver / getResource /*returns protected resources*/
(resourceserver управляет базой данных, где хранятсяпользовательские данные и предпочтения и фотографии / продукты / комментарии / и т. д.)
Но сейчас я не знаю, хорошая ли это идея.Я думаю, что рабочий процесс должен быть таким, но я вижу его несколько беспорядочным
Пользователь переходит к registration.html, заполняет форму и затем:
One call to https:authserver/register
with body:{emil, password}
One call to https:resourceserver/register
with body:{emil, date, favorite color}
Здесь я вижу проблему, и эточто я должен проверить, если оба вызова являются успешными, а если нет, отменить то, что сделало успешный вызов с другим вызовом (при наличии аутентификации и ресурсов на том же сервере, если что-то идет не так, мне не нужно ничего отменять)
Если оба вызова успешны, пользователь переходит к login.html, а затем:
One call to https:authserver/login
with body:{emil, password} and the user gets in a cookie the session id
Затем, если пользователь хочет получить свои фотографии, например, он переходит к photos.html, а затем:
One call to https:resourceserver/getResource and the resourceserver gets the cookie
One call from resourceserver to http:sauthserver/check to know if the user is authorized to access
Но как хост B может получить cookie, установленный хостом A, если cookie не может быть прочитан внешним интерфейсом, потому что httpOnly имеет значение true?
Сначала я сделал это с помощью JsonВеб-токены и этот рабочий процесс имеют смысл, поскольку токен хранится в LocalStorage, чтобы оба хоста могли его получить, но я читал, что в хранилище JWT есть проблемы с безопасностью.
Я думаю, что не понимаю, как отделитьПроверка подлинности и ресурсы, может ли кто-нибудь помочь мне понять, какой будет правильный рабочий процесс?Или какие-либо комментарии или предложения?
Заранее спасибо