Как правильно сделать аутентификацию для вебни
Привет, подскажите как грамотно спроектировать аутентификацию (и базовую авторизацию) для приложеньки.
Суть такая: есть фронты, несколько, веб/мобилки/десктоп и т.д. Есть бэк в нескольких az, с общей базой и вот этим всем. Есть несколько миллионов юзеров (DAU на пару порядков ниже) и до 100 rps. Ну и есть всякие login with google/apple/shitbook, saml2, totp 2fa и прочие ужасы. Есть нынешняя система авторизации, которая за годы превратилась в цирк с кривой схемой и данными которые периодически вообще лежат в другом сервисе. И исправлять которую по трудозатратам плюс-минус как с нуля переписать
Изначальная идея: взять keycloak, прикрутить кастомную федерацию которая будет брать данные из старой системы и постепенно перетягивать юзеров к себе. Нынешняя система использует plain token и на каждый чих лезет в базу. Собственно идея была взять jwks, где-нибудь в редисе/пабсабе хранить revocation list с ex в пару часов и тупо реплицировать где только можно (даже под нагрузкой если там только revocation он много не сожрет) и гонять в токене все что до этого шло из базы (user ID, почта, группы).
С чем столкнулся: с кучей статей в сети на тему что если дать фронту jwt напрямую, то будут CSRF, XSS, БТИ и другие страшные аббревиатуры. Начал копать что предлагают, и обычно все сводится к тому чтоб сделать микробэк который будет брать plain token от фронта, менять его на jwt и уже самостоятельно следить за lifecycle.
Ну и собственно вопрос: как сделать нормально? Я знаю что keycloak разделяет session token и access token, можно ли тупо использовать его и воткнуть обмен сессии на access через подзапрос в nginx ingress? Можно ли забить и тупо вызывать introspection на каждый запрос? Но в этих случаях все 100 рпс будут дружно долбить в keycloak. Или поскольку revocation в нашем случае крайне редкая штука (типа explicit logout или принудительного отзыва токенов) и там одномоментно будет от силы пара сотен записей - правда ли все будет так грустно как пишут, и нельзя ли просто загнать revocation в пабсаб с exp в пару часов и тупо слушать его тем же nginx или напрямую приложением для локального кэша отозванных токенов? Или можно сделать что-то в этом духе прямо на ингрессе? Или присобачить таки sidecar который будет это делать и использовать auth request до него?
Ссылки, маны, советы welcome