Как реализовать авторизацию через портал госуслуг? - коротко
Сначала зарегистрируйте приложение в личном кабинете разработчика Госуслуг, получите client_id, client_secret и укажите redirect‑uri. Затем реализуйте OAuth‑2.0 поток: направьте пользователя на страницу аутентификации, получите код авторизации, обменяйте его на токен и проверьте подпись JWT для подтверждения личности.
Как реализовать авторизацию через портал госуслуг? - развернуто
Для интеграции системы авторизации через портал Госуслуг необходимо выполнить несколько последовательных действий, каждый из которых требует тщательной настройки и проверки.
-
Регистрация приложения в личном кабинете разработчика
- Откройте личный кабинет на портале Госуслуг.
- Подайте заявку на получение доступа к API «Единый вход».
- После одобрения получите уникальные идентификаторы: client_id и client_secret.
-
Настройка OAuth‑2.0
- Протокол OAuth‑2.0 используется для передачи токена доступа.
- В конфигурации вашего сервера укажите полученные client_id и client_secret.
- Задайте URL‑адреса перенаправления (redirect_uri), которые будут принимать ответ от Госуслуг после успешного ввода пользователем своих данных.
-
Формирование запроса авторизации
- При переходе пользователя к входу сформируйте URL вида:
https://id.gov.ru/authorize?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI&scope=openid+profile&state=RANDOM_STRING - Параметр
stateобязателен: он защищает от CSRF‑атак, генерируя случайную строку, которую нужно проверить после возврата.
- При переходе пользователя к входу сформируйте URL вида:
-
Обработка ответа от портала
- После успешного ввода пользователь будет перенаправлен на указанный
redirect_uriс параметрамиcodeиstate. - Проверьте, что полученный
stateсовпадает с тем, что вы отправляли.
- После успешного ввода пользователь будет перенаправлен на указанный
-
Получение токена доступа
- Выполните POST‑запрос к эндпоинту токенов:
https://id.gov.ru/token - В теле запроса укажите:
grant_type=authorization_code,code=RECEIVED_CODE,redirect_uri=YOUR_REDIRECT_URI,client_id=YOUR_CLIENT_ID,client_secret=YOUR_CLIENT_SECRET. - В ответе получите
access_token,id_tokenиrefresh_token.
- Выполните POST‑запрос к эндпоинту токенов:
-
Валидация ID‑токена
- ID‑токен – JWT, содержащий сведения о пользователе (ФИО, ИНН, e‑mail и др.).
- Проверьте подпись токена, используя публичный ключ, опубликованный на портале Госуслуг.
- Убедитесь, что токен не просрочен (
exp) и предназначен для вашегоclient_id(aud).
-
Получение пользовательских данных
- При необходимости запросите дополнительные атрибуты через endpoint пользовательского профиля, передавая
access_tokenв заголовкеAuthorization: Bearer ACCESS_TOKEN.
- При необходимости запросите дополнительные атрибуты через endpoint пользовательского профиля, передавая
-
Создание локальной сессии
- На основе полученных данных сформируйте собственный сеанс пользователя в вашем приложении.
- Сохраните в базе идентификатор пользователя из Госуслуг (например,
subиз JWT) для последующей привязки.
-
Обновление токенов
- При истечении срока действия
access_tokenиспользуйтеrefresh_tokenдля получения нового набора токенов, отправив запрос к тому же endpoint токенов с параметромgrant_type=refresh_token.
- При истечении срока действия
-
Безопасность и аудит
- Храните
client_secretиrefresh_tokenв защищённом хранилище (например, в переменных окружения или в секретном менеджере). - Логируйте только технические детали запросов, исключая персональные данные.
- Регулярно проверяйте актуальность сертификатов и публичных ключей, используемых для подписи JWT.
- Храните
Следуя этим шагам, вы построите надёжный механизм авторизации, позволяющий пользователям входить в ваше приложение через портал Госуслуг без необходимости создавать отдельные учётные записи. Каждый этап требует тестирования в тестовой среде, предоставляемой Госуслугами, перед переходом в продакшн.