Table of Contents

🌐 English · Русский

Авторизация

Большинство эндпоинтов требуют авторизации. Клиент поддерживает несколько способов входа: существующий OAuth-токен, официальный OAuth-флоу device-code и — best-effort — cookie, QR-код или логин/пароль.

Вход по токену

client.Authentication.SignInWithToken("<oauth-token>");
Console.WriteLine(client.Authentication.IsAuthenticated);

Токен сохраняется и отправляется как Authorization: OAuth <token> с каждым запросом.

Не храните токен в коде — используйте переменную окружения или защищённое хранилище.

Вход через OAuth device-code flow

Device-code flow — официальный, полностью поддерживаемый способ интерактивно авторизовать пользователя, не работая с его паролем: пользователь подтверждает короткий код на странице Яндекса, а библиотека опрашивает сервер до получения токена.

var token = await client.Authentication.SignInWithDeviceFlowAsync(code =>
    Console.WriteLine($"Откройте {code.VerificationUrl} и введите код {code.UserCode}"));

// Клиент авторизован; сохраните token.AccessToken для повторного использования.

Для точного контроля можно выполнить два шага самостоятельно: запросить код через RequestDeviceCodeAsync, затем опрашивать PollDeviceTokenAsync (возвращает null, пока пользователь не подтвердил). DeviceAuthOptions позволяет переопределить OAuth-клиент, имя устройства, интервал опроса и таймаут.

Сохранение и восстановление сессии

Состояние авторизации (client.Authentication.Session) можно экспортировать в сериализуемый AuthSnapshot и восстановить позже — включая куки — чтобы пользователю не пришлось входить заново:

var snapshot = client.Authentication.Session.Export();
var json = System.Text.Json.JsonSerializer.Serialize(snapshot);
// ... сохраните json в защищённом хранилище ...

client.Authentication.Session.Import(
    System.Text.Json.JsonSerializer.Deserialize<YandexMusic.Authentication.AuthSnapshot>(json)!);

Кроме токена клиент может входить по сессионным cookie Яндекса, по интерактивному QR-коду или по логину и паролю.

// Cookie, полученные иным способом (например, из браузера/приложения)
await client.Authentication.SignInWithCookiesAsync(cookies);

// QR-код
var qr = await client.Authentication.StartQrSignInAsync();
// отрисуйте qr.Url как QR-код, пользователь сканирует его приложением Яндекса, затем опрашивайте:
while (!await client.Authentication.TryCompleteQrSignInAsync(qr))
{
    await Task.Delay(TimeSpan.FromSeconds(2));
}

// Логин и пароль (Яндекс часто требует капчу или 2FA — в этом случае метод бросает исключение)
await client.Authentication.SignInWithPasswordAsync("login", "password");

⚠️ Эти флоу — best-effort реализация версионно-хрупкого недокументированного протокола Яндекс Паспорта, который часто закрыт капчей. Проверяйте их на живом флоу — пути по токену и device-code надёжные и полностью поддерживаемые.

Выход

client.Authentication.SignOut();

Где взять токен

Проще всего — через OAuth implicit flow Яндекса. Откройте в браузере

https://oauth.yandex.ru/authorize?response_type=token&client_id=23cabbbdc6cd418abb4b39c32c41195d

войдите и скопируйте значение access_token из адреса перенаправления https://music.yandex.ru/#access_token=…. Не публикуйте токен и не храните его в коде — используйте переменную окружения или защищённое хранилище.