Исходники:
git clone https://git.empherino.net/NEb0/oauth-test.git
cd oauth-test
Зеркало исходников на github: https://github.com/bochsdbg/oauth-test
Сборка и запуск:
docker build . -t oauth-test && docker run --rm -p 8000:8000 -it oauth-test
Демо: https://oauth-test.empherino.net/
Админский доступ admin:123
Также для тестирования предустановлено два пользователя:
test:123
test2:123
1.1 Вход по логину/паролю
1.2 Регистрация по логину/паролю
1.3 Перенаправления для аутентификации пользователей, для более удобного входа, в случае, когда пользователь приходит с клиента
1.4 API, в том числе функциональное (просмотр профиля пользователя, просмотр и отзыв токенов), и авторизационное (вход регистрация пользователей по логину/паролю, а также стандартизированное API oauth-протокола)
2.1 Вход по OAuth2
2.2 Интерфейсная часть к API сервера:
2.2.1 "домашняя" страница
2.2.2 Просмотр "профиля" пользователя
2.2.3 Для админа: возможность просмотра существующих токенов обновления и токенов доступа для всех пользователей, с возможностью их отзыва ("удаления") как по одному, так и всех access_token-ов для одного пользователя сразу
Приложение разделено на две части: клиент (/frontend
) и сервер (/backend
). Сервер представляет собой как сервер
приложений, так и авторизационный центр. Физически их можно разнести на разные машины, но в данном приложении
используется разделение исключительно по роутингу, чтобы упростить развертывание в докере.
Реализована схема OAuth2 Code Exchange с расширением PKCE, т.к. это единственная схема, позволяющая обходиться без разделения общего секрета (client_secret), и рекомендуема для использования в SPA. Упрощенное описание протокола доступно по ссылке: https://www.oauth.com/oauth2-servers/pkce/ . Полное: https://tools.ietf.org/html/rfc7636
Для входа в систему нужно аутентифицироваться на бэкенде, а затем авторизоваться на клиенте. При выходе из системы процедура аналогична: "разлогиниться" нужно и на клиенте и на сервере (аналогично, с помощью входа через условный google на некоторый сайт, ваша сессия, обеспечивающая частичный функционал необходимый только для работе на клиенте, может все еще работать какое-то время). Для быстрого переключения между бекендом и фронтендом есть кнопка в правом верхнем углу.