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 сервер. |