Получения токена для работы с почтой через imap

Jul 12, 2016 23:12

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

Для запроса 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 сервер.

oauth, программирование

Previous post Next post
Up