Клуб Яндекс.Метрики

Получить email пользователя, прошедшего аутентификацию через OAuth

pooloosh11
11 декабря 2017, 13:36

Пользователь попадает на https://oauth.yandex.ru/authorize?response_type=code&client_id=client_id&force_confirm=yes, вводит свои учетные данные, попадает на redirect_url, который был установлен при создании приложения, я получаю параметр ответа code=<какой-то код>, по этому коду могу сгененировать access_token.  В правах приложения есть Яндекс.Паспорт и Яндекс.Метрика

Как получить email авторизованного пользователя? Можно ли получать одновременно и code и access_token? Можно ли, вообще, получить email пользователя в ответе: на reidect_uri отправить почту, как параметр HTTP-ответа? 

5 комментариев
acuna.personal
19 июля, 16:31
Пипец конечно у Яндекса служба поддержки, как и их API, половина методов реализована через то место, в конечном итоге плюнул и свою обертку написал для посыла запросов на их эндпоинты напрямую, благо для этого все что нужно имеется. Но хорошо что все-таки СП у них есть, у Гугл вообще просто теги на StackOwerflow свои, но там и комьюнити милионное.


Насчет твоего вопроса - вообще-то как правило во всех API данные авторизации выдаются при получении данных юзера . С другой стороны это все-таки правильно, ибо инфу о юзере должен сообщать эндпоинт инфы о юзере, а не что-то другое)


Тебе достаточно банально слать гетом запросы на https://login.yandex.ru/info?oauth_token=<токен>. Но это нужно делать на том этапе, когда токен уже получен, разумеется. Среди всего прочего ответом будет и мыло. Точнее не мыло, а имя пользователя, мыло они не выдают. Наверное это правильно, ибо спам никому не нужен. Разве что можно банально подставлять @yandex.ru, если почта на их домене, а если на своем, то я не знаю что они выдают если честно, не проверял.
Обновлено 19 июля, 16:34
Яндекс Василий
20 июля, 18:50
acuna.personal,
здравствуйте!
Уточните, пожалуйста, какие именно трудности Вы испытали при обращении в службу поддержки? Не забудьте указать номер обращения.
acuna.personal
20 июля, 22:06
Яндекс Василий,
извиняюсь если что, не ожидал что она читается сотрудниками. Сам я не обращался, просто время от времени читаю вопросы других если вдруг у меня они появляются, и часто я не вижу ответов на них вообще, поэтому и сделал такой вывод. Я и сам чисто проходил мимо, если бы перед самим эта необходимость не встала и не стал бы искать инфу, то и на эту ветку бы тоже не попал. Но претензий не имею, я понимаю что сложно за всеми угнаться.


А в плане трудностей - я бы лучше ответил бы какие трудности испытал с API (точнее с библиотекой). Из тех, что вспомнил - это закачивание файла на лету прямо на сервер (то есть из InputStream в Java. Ава обманчива, ибо пишу я все-таки под Java, а не под iOS). У вас сама библиотека принимает только File. Точно так же и получать файл требовалось тоже на лету, то есть передавать его с сервера сразу в поток. У вас можно только закачать какой-либо файл. Просто не всегда для этого нужно иметь данные именно в файлах. В исходниках смотрел, из потока данные берутся, но все эти методы приватные. Так что если будет возможность, в дальнейшем рекомендую эти методы тоже добавить для всех. Хоть я уже обвертку свою накалякал, но для остальных юзеров это может пригодится.
acuna.personal
20 июля, 22:07
Яндекс Василий,
P. S. Доступ к сервису Яндекс.Диск.
Яндекс Василий
20 июля, 18:48
Здравствуйте, pooloosh11!


Получить email-адрес авторизованного пользователя возможно - для этого (как указал выше acuna.personal) действительно нужно использовать метод "Запрос информации о пользователе" API Яндекс Паспорта. Дополнительно, в рамках сервиса Яндекс OAuth Ваше приложение должно иметь право в сервисе Яндекс Паспорт "Доступ к адресу электронной почты".
Больше информации об этом методе Вы можете получить на странице https://tech.yandex.ru/passport/doc/dg/reference/request-docpage/


В свою очередь, в рамках сервиса Яндекс OAuth токен можно получить несколькими способами, один из которых Вы используете (получение токена по коду подтверждения). В свою очередь, если Вам нужно получить OAuth-токен сразу, то Вы можете воспользоваться способом получения токена, например, для веб-сервиса. Больше информации об этом способе Вы можете найти на странице https://tech.yandex.ru/oauth/doc/dg/reference/web-client-docpage/
Обновлено 20 июля, 18:48