Интеграция с Яндекс ID.
В данной статье описан один из вариантов получения токена, для доступа к данным пользователя Яндекс. Статья написана 25.12.2023, соответственно и актуальна на этот момент.
Шаг 1. Создание приложения.
Необходимо создать так называемое "приложение". Это приложение создается в аккаунте не пользователя, данные которого надо будет получать, а в аккаунте владельца сайта.
Авторизуемся в яндексе аккаунтом владельца сайта. Заходим на одну из следующих ссылок:
https://oauth.yandex.ru/client/new/id/ если нужно будет доставать просто данные пользователя такие как имя, почта.
https://oauth.yandex.ru/client/new/ если нужно будет доставать данные допустим из метрики или других сервисов.
Здесь:
Веб-сервисы - означает, что авторизация будет происходить на сайте, а не на андроиде или ios.
Redirect URI - страница, на которую будет направлен пользователь после успешного подтверждения своего аккаунта. На эту страницу в url будет направлен код, который потом можно обменять на токен.
Доступ к данным - то что данное приложение может запрашивать о пользователе, эти параметры будут перечислены в момент подтверждения согласия пользователем.
После создания получим следующее окно:
Сюда в дальнейшем можно зайти по адресу https://oauth.yandex.ru
Шаг 2. Получение кода.
Создадим на странице сайта кнопку для авторизации
Здесь ClientID - это поле ClientID созданного приложения
По нажатию кнопки пользователем откроется новое окно в котором он будет авторизовываться обычными Яндексовскими средствами. Далее после успешной авторизации в этом же окне откроется страница с адресом, который мы указали в поле Redirect URI нашего приложения. В url этой страницы будет код. Страница может быть совершенно пустой и ее можно просто закрыть после отправки кода например на бэк.
Шаг 2. Обмен кода на токен.
Далее надо этот полученный код обменять на нужный нам токен. Здесь статья из документация https://yandex.ru/dev/id/doc/ru/codes/screen-code-oauth#token
В документации написано, что заголовок Content-type должен быть таким: Content-type: application/x-www-form-urlencoded иначе запрос не проходит.
В Laravel получение токена можно сделать так:
Обязательно надо использовать asForm() иначе не получается.
Шаг 2. Получение данных пользователя.
Получив токен, мы можем получать любые данные, которые разрешены приложению, которое было создано на первом шаге.
Для этого в заголовке запроса должен быть вставлен этот токен. В laravel можно так: $response = Http::withToken('token')->post(...);
Документация по api например метрики здесь: https://yandex.ru/dev/metrika/doc/api2/concept/about.html
Примечание.
Все это работает, если сайт уже развернут в Интернете. На этапе разработки можно пользоваться сервисом ngrok. Статья о нем здесь https://dvkuklin.ru/different/access-to-the-local-server-from-outside