Интеграция с Яндекс ID.

Интеграции

Интеграция с Яндекс ID.

Получение данных пользователя из Яндекс по API. Авторизация пользователя на сайте через Яндекс.

В данной статье описан один из вариантов получения токена, для доступа к данным пользователя Яндекс. Статья написана 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. Получение кода.

Создадим на странице сайта кнопку для авторизации

<button onclick="handlConnect()">Авторизоваться с помощью яндекс ID</button>
<script>
function handlConnect() {
window.open("https://oauth.yandex.ru/authorize?response_type=code&client_id=ClientID",
'new_window',
{
left: 200,
width: 200,
menubar: 'no'
});
}
</script>


Здесь 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 получение токена можно сделать так:

$res = Http::asForm()->post('https://oauth.yandex.ru/token',
[
"grant_type"=>'authorization_code',
"code" => '7093741',
"client_id" => 'ClientID',
'client_secret' => 'Client secret'
]
);


Обязательно надо использовать 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