Осуществляем описанную в документации процедуру без редиректа пользователя в браузер.
Нам понадобится:
- client_id=ID - ID приложения
- login=LOGIN - логин пользователя
- passwd=PASS - пароль пользователя
1. Инициализируем куки
$ curl --cookie-jar jar --output /dev/null \
https://oauth.yandex.ru/authorize?response_type=token&client_id=ID
2. Отправляем логин и пароль пользоватея
$ curl -v --cookie jar --cookie-jar jar \
--data 'login=LOGIN' \
--data 'passwd=PASS' \
--data 'twoweeks=no' \
--data 'retpath=https://oauth.yandex.ru/authorize?response_type=token' \
https://passport.yandex.ru/auth?retpath=https%3A%2F%2Foauth.yandex.ru%2Fauthorize%3Fresponse_type%3Dtoken&mode=qr
В ответе приходит редирект с track_id
:
< Location:
https://passport.yandex.ru/auth/finish/?track_id=9f247041a0db64d1715a385a3187350702
Ничего с ним не делаем, только радуемся.
3. Отправляет client_id
Берем ссылку, указанную в первом пункте документации и отправляем туда client_id нашего приложения.
$ curl -v --cookie jar --cookie-jar jar \
--data 'client_id=ID' \
https://oauth.yandex.ru/authorize?response_type=token
Если пользователь уже разрешал приложению доступ к данным, на данном шаге вернется токен.
4. Разрешаем доступ
Если пользователь еще не разрешал приложению доступ к данным, в ответ придет страница с формой для разрешения. Парсим ее на предмет необходимого и делаем запрос:
$ curl -v --cookie jar --cookie-jar jar \
--data 'granted_scopes=directory:read_users' \
--data 'granted_scopes=directory:read_organization' \
--data 'granted_scopes=directory:read_groups' \
--data 'granted_scopes=directory:read_domains' \
--data 'granted_scopes=directory:read_departments' \
--data 'granted_scopes=tracker:read' \
--data 'csrf=7e5234b6ed81567112844732e62dcf3eee2e6551:1547983622222' \
--data 'response_type=token' \
--data 'redirect_uri=https://oauth.yandex.ru/verification_code' \
--data 'request_id=efeef51631834197af75ef2d4727ada6' \
--data 'retpath=https://oauth.yandex.ru/authorize?response_* Connection #0 to host oauth.yandex.ru left intact type=token' \
--data 'client_id=ID' \
https://oauth.yandex.ru/authorize/allow?response_type=token
В ответе приходит редирект с access_token
:
< Location:
https://oauth.yandex.ru/verification_code#access_token=AQAEXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXT00&token_type=bearer&expires_in=27842860
Токен сохраняем в приложении и используем для запросов к API Яндекса.