?

Log in

No account? Create an account
Записи оттуда
откуда возвращаются
Получения токена для работы с почтой через imap 
12-июл-2016 23:12 [oauth, программирование]
Получению ключика для авторизации в яндекс почте.

Для запроса token ключа к доступу в imap.yandex.ru необходимо отправить клиента на следующую страницу (лучше всего во всплывающем окне):
https://oauth.yandex.ru/authorize
?response_type=code
&client_id={client_id}
&state={host}
&login_hint={email}


где:
* client_id - код вашего приложения, ссылка в описании от яндекса.
* host - любая строка для идентификации клиента, в нашем приложении мы используем домен пользователя.
* email - почтовый адрес пользователя, при наличии этого параметра пользователю сразу будет предложено разрешить доступ к данной почте (если он авторизован в ней), без него будет предложено выбрать почтовый ящик.
По сути из обязательных параметров только response_type и client_id.


Получению ключика для авторизации я google.


По аналогии с работой через яндекс почту, пользователя надо направить на страницу получения token ключа от google.

https://accounts.google.com/o/oauth2/v2/auth
?response_type=code
&access_type=offline
&client_id={client_id}
&redirect_uri={redirect_uri}
&scope=https://mail.google.com/
&state={host}
&login_hint={email}


тут, в дополнении к уже описанным параметрам добавляется redirect_uri - это ссылка на страницу куда перенаправить пользователя при одобрении или запрете.
также стоит обратить внимание на параметр access_type, который по умолчанию online, но мы передаём offline, для получения ещё одного ключика.


Обработка ответа от сервиса получения ключика:

в случае успеха запроса доступа и яндекс и гугль, переадресовывают нас на redirect_uri куда передают 2 GET параметра:
code={код доступа} и state={host}. По полю state можно понять что пользователь именно тот, которому разрешено (например там хранится какое-нибудь значение из сессии или другая проверочная информация, а вот поле code нужно для получения token ключика от сервиса.

для обоих сервисов необходимо отправить запрос со следующими параметрами:
?grant_type=authorization_code
&code={код доступа}
&client_id={client_id}
&client_secret={client_secret}


куда вписываем полученный код, и секретный код. Естественно данный запрос надо делать с сервера, т.к. client_secret нужно держать в секрете.
Для сервиса google.com ещё необходимо передать redirect_uri точно такой же как и был при запросе кода.

Оба сервиса возвращают в случае успеха вам вернут json ответ:
{
  "access_token": "1234567890",
  "token_type": "bearer",
  "expires_in": 86400
}

access_token - содержит ключик который мы будет отправлять на почтовый сервис при авторизации.
expires_in - количество секунд на которые ключик актуален.
также google возвращает refresh_token - код для обновления токена, т.к. у него срок жизни основного ключика около 1 часа.


В следующий раз расскажу как обновлять token у google, и отправлять авторизацию на imap сервер.
Страница загружена 24 авг 2017, 3:27 GMT.