Я настраиваю службу, которая должна авторизоваться на основе существующего Gitlab в качестве поставщика OAuth.
Сервис представляет собой SPA, который обслуживается сервером разработки веб-пакетов в режиме разработки и сервером nginx в производственном режиме.
Я также настраиваю внешний API, который должен обрабатывать базу данных и делать запросы к данному экземпляру gitlab (например, репозитории pull).
Мой SPA авторизуется против OAuth Gitlab с потоком implicit_grant и получает токен доступа. В настоящее время я передаю access_token после перенаправления на мой API-интерфейс, и там я получаю имя пользователя и имя пользователя Gitlab через запрос к экземпляру gitlab с access_token. С их помощью я генерирую jwt и отправляю его клиенту (SPA) и сохраняю его там, чтобы я мог авторизовать свой API с этим JWT.
Как бы я обработал начальный access_token в моем бэкэнде (потому что мне нужен токен для вызовов gitlab)?
В настоящее время я думаю о том, чтобы записать его пользователю в базе данных и получать пользователя каждый раз, когда он делает запрос (обычный поток паспортов), поэтому у меня также есть токен. Но что, если токен станет недействительным или истечет срок его действия?
Если я использую перехватчик в бэкэнде и если токен недействителен (gitlab даст мне 401), перенаправьте 401 на мой клиент, дайте ему получить новый токен и передать его обратно бэкенду, сгенерируйте новый JWT, отправьте этот снова к клиенту и позволить ему сделать тот же запрос, что и исходный запрос (также через перехватчик)?
Или я должен просто перенаправить 401 на мой клиент, позволить ему получить новый токен, позволить ему публиковать этот токен, например, в / renewToken и сохранить токен в базе данных и использовать старый JWT?
Надеюсь, кто-нибудь может помочь мне понять этот поток.