Как правильно реализовать авторизацию в Spring Rest для мобильных и веб приложений?
Ребята помогите пожалуйста
Пытаюсь построить Rest api на Java, где клиентами будут
Мобильные приложения (Android, IOS)
И веб приложение.
И так, надо сделать авторизацию :
нативную и с помощью соцсетей (Google,Facebook,Vk
и возможно Apple ID).
Проблема следующая, я не совсем знаю ,как правильно реализовать авторизацию на Rest с мобильными и веб приложениями.
Уже практически все перечитал ,но ничего не прояснилось
(А возможно ,только больше запутался.
Изначально думал просто jwt вместо сессий и всё.)
Что я узнал
1. Использовать технологию единого входа (SSO)
2. Чтобы реализовать авторизацию для мобильных и веб приложений, нужно использовать Oauth2. Следовательно , Сервер Авторизации , Сервер Ресурсов и Клиент.
3. Вместо сессий токены jwt
Инструменты выбрал следующие:
Spring Security + Spring Authorization Server + hibernate + MySQL
Но когда начал собирать столкнулся с проблемой ,так как мобильные приложения - это паблик клиент ,
т.е использовать Authorization Code + PKCE ,но примеров реализаций нет .
Прочитал ,что есть такой Keycloak.
Но я не уверен ,что он мне подходит.
Где-то в коментах прочитал ,что он не совсем подходит для того ,чтобы сохранять юзеров в свою бд.
Подскажите пожалуйста ,
как правильно реализовать авторизацию в рест для мобильных и веб приложений .
И вообще , на верном ли я пути?
И ,что для моего проекта будет больше подходить : Keycloak? Ory Hydra?
Я новичок с рест до этого не работал , а про Oauth относительно недавно узнал .
Вы как-то сильно все усложнили. Для логинов с социальними сетями не нужно ставить свой аторизационный сервер так как в данном случае авторизационным сервером являетются как раз соц сети. Достаточно на своем бэке использовать любую oAuth библиотеку или самому имплементировать протокол. Например spring-security если работаете со спрингом.
Как только человек авторизован нужно управлять его сессией. В мобильном приложении jwt будет хорошим направлением, в вебе лучше использовать куки, но можно и jwt .