Аутентификация OAuth2 в приложении посредством Google Sign-In. Непрерывный доступ к API Google

Мы используем сервисы в интернете, чаще всего даже не зная, каким образом они устроены и функционируют. Не задумываясь, как передается информация о нас между тем или иным сервисом, мы просто делаем переходы с сайта на сайт, с одного приложения в другое. При этом, конечно же, между тем или иным сервером проходит моментальный обмен информацией. Чтобы дать вам знать немного больше о том, как устроена в интернете, мы пишем эту статью. В ней мы расскажем, что такое auth key, где это применяется и какова его роль в повседневной работе каждого из нас.

Auth key - это...

Итак, как можно понять из самого сокращения, полной формой этого термина является словосочетание «authorization key», что с английского переводится как «ключ авторизации». Такое название в полной мере отображает роль этого механизма и его сущность. Ключ сам по себе является генерированным из 32 случайных символов кодом, который используется для авторизации пользователя на сторонних сервисах.

Объяснить, что такое auth key, можно так: чтобы сервис знал, что вы - это вы, он запрашивает ваш код, переданный другим сервисом. Таким образом, между собой интернет-ресурсы обмениваются информацией о вашем идентификаторе, позволяющем «узнавать» вас. При этом, от вас не нужно будут требовать повторной авторизации, например, путем ввода логина и пароля, или подтверждения с помощью пароля. По уникальному ключу вас «узнают» даже без вашего участия в один момент. Удобно, согласитесь.

Где применяется передача auth key?

После того как разобрались, что такое auth key, следует уточнить сферу его применения. На примере вы сможете разобраться в этой категории подробнее и яснее, чем просто прочитав определение.

(id) auth key применяется в наиболее распространенном виде в случае работы социальных сетей и приложений, которые работают на их платформе.

Не секрет, что все игры и приложения, доступные нам в сети «ВК» созданы не администраторами «Вконтакте», а сторонними разработчиками. Это значит, что какая-нибудь игра размещена физически не на серверах социальной сети, а где-нибудь отдельно.

Идем дальше: задача приложения - выполнять те команды и задачи, которые перед ним ставит пользователь, перешедший на его страницу. Но как осуществить этот процесс (запрос пользователя с серверов «Вконтакте», адресованный, скажем, игре «Wormix»)? Очень просто! Социальная сеть передает ваш уникальный ключ - auth key (VK в качестве примера будет наиболее доступным каждому из нас) - игре. В свою очередь, та сверяет ваш ключ с ключом человека, который создал ваш аккаунт и, если этот параметр совпадает, вас авторизуют. Интересно, правда?

Вам не нужно вводить пароль и логин, повторно подтверждая себя и авторизуясь. Нет, все происходит так, что пользователь даже не замечает, что обращается к стороннему ресурсу - приложению.

Как узнать мой auth key?

Примерно вы разобрались в том, что из себя представляет auth key. Как посмотреть его, и можно ли это сделать, рассмотрим в этом пункте нашей статьи.

Итак, поскольку авторизационный ключ передается между сетью и приложением при помощи вашего браузера, вы, конечно же, можете его найти и увидеть собственными глазами. Тем более, что эта характеристика не меняется и является вашим уникальным ключом при работе с социальными сетями (и не только).

Чтобы увидеть ее, можете зайти на сайт «ВК» и перейти в какое-нибудь приложение. Далее нам нужно обратиться к исходному коду страницы, на которой размещена игра - это делается с помощью «горячих клавиш» Ctrl + U. Нажав их, вы увидите белый лист с большим количеством цифр и букв. Это код сайта, его символьное отображение. Здесь нам нужно искать параметр «auth_key», поэтому эти слова можно начать вбивать в форме поиска по странице. Вызвать ее, кстати, можно сочетанием Ctrl + F. Далее будет показан параметр, который мы описывали.

Почему не стоит публиковать свой auth key где попало?

Ваш ключ авторизации - это уникальный параметр, по сути, позволяющий получать доступ к социальной сети (и не только). Фактически, это данные, равнозначные логину и паролю одновременно. Теперь вы понимаете, почему его не рекомендуется открывать посторонним? Если оставите этот ключ где-нибудь в сети, вполне возможно, что специалисты, знающие о том, что такое auth key, больше и умеющие имитировать его, смогут воспользоваться им в своих целях. Зачем вам это?

Манипуляции с auth key

На самом деле, манипулировать с ключом авторизации можете и вы. По крайней мере, так делают игроки некоторых популярных приложений «Вконтакте». Делается это следующим образом: нужно узнать auth_key пользователя, у которого больше достижений, чем у вас, после чего вы заходите на сервер под его ключом. Таким образом, сервис распознает вас как того игрока, и фактически вы попадаете в его аккаунт (в игре). Например, так обманывают в Wormix и «Тюряге» - популярнейших игрушках «Вконтакте». Такие же манипуляции, очевидно, возможны и с прочими приложениями.

Правда, мы не рекомендуем так делать. Если подменяется ключ авторизации с целью мошенничества - это противозаконно и аморально. В том же случае, если речь идет о накрутке игр и прочих развлекательных сервисов - то делать это вообще, на наш взгляд, бессмысленно. Суть игры и заключается в том, чтобы наслаждаться процессом, а не жульничать.

Так как наша компания является аккредитованным регистратором доменов в зонах .RU и .РФ , то Вы можете перенести доменные имена в данных зонах под наше полное обслуживание.
30 августа 2016 года вступил в силу новый регламент смены регистратора домена в зонах.RU и.РФ , в соответствии с которыми перенос выполняется с помощью специального кода AuthInfo-code .

Первое, что нужно сделать для переноса доменного имени под наше обслуживание, это запросить код для переноса домена у своего текущего регистратора. Если Вы не знаете, кто является Вашим регистратором домена, то Вы можете воспользоваться сервисом WHOIS (например, на нашем сайте ), в котором Вы сможете найти идентификатор Вашего регистратора в поле "registrar " (например registrar: BEGET-RU ), и уже с помощью него найти сайт регистратора.

Для Вашего удобства мы собрали информацию о том, как получить Auth-code для переноса доменов в зонах.RU и.РФ от некоторых популярных регистраторов (обращаем внимание, что данные инструкции могут быть устаревшими в связи изменением со стороны регистраторов процедуры выдачи AuthInfo-code):

Для подачи заявки на перенос домена Вам необходимо в разделе нажать на соответствующую кнопку напротив Вашего домена. Если домена нет в списке, то Вам необходимо предварительно его добавить в этом же разделе. После нажатия на кнопку у Вас появится форма для ввода ключа, примерно как предоставлено на рисунке.

Стоимость переноса составляет 150 рублей, но в случае наличия акций стоимость переноса может быть изменена или перенос может быть для вас бесплатным. Точную стоимость переноса для ваших доменов вы можете посмотреть в Панели управления в разделе .


После ввода кода для переноса домена процесс будет успешно запущен и статус в разделе изменится на "Ожидает переноса ". Обращаем Ваше внимание, что код действует 20 дней с момента выдачи его регистратором.

Если код был указан верный, то через некоторое время на почту администратора домена поступит письмо со ссылкой для подтверждения переноса домена, по которой нужно будет перейти, в противном случае перенос будет отклонён автоматически через некоторое время.

После успешного подтверждения переноса домена перенос будет автоматически завершён в течение 5-7 дней. Также в процессе переноса в WHOIS Вашего домена появится дополнительный статус "reg-ch ", например reg-ch:   BEGET-RU , который означает процесс смены регистратора на указанного в нём (в данном случае BEGET-RU)

По окончанию переноса напротив Вашего домена отобразится период делегирования Вашего домена

Если Вы увидели в панели управления в разделе напротив Вашего домена статус "Ошибка "

то в большинстве случае это означает, что указан неверный ключ переноса домена или же в реестре отсутствует запись о Вашем ключе. В таком случае Вам необходимо обратиться к текущему регистратору домена. Также перенос может быть отклонён в том случае, если до окончания периода делегирования домена осталось 7 или менее дней. В этом случае перед повторной подачей заявки на перенос Вам необходимо продлить домен у текущего регистратора.

Как получить код у своего регистратора?

Regru

Для получения Auth-code форму . В ней необходимо ввести домены, для которых Вы хотите получить код для переноса. Форма позволяет одновременно вводить домены как в зоне.RU, так и в зоне.РФ. Затем выбираете способ получению ключа и вводите email или номер телефона, в зависимости от выбранного способа. Подтверждаете, что Вы не робот, и нажимаете "Продолжить".

Обязательно приложите в форму документы по образцу:

Для физических лиц:
- копии основной страницы паспорта и страницы с пропиской
- скан-копию

Для юридических лиц:
- копию свидетельства ИНН
- скан-копию

После этого заявка на получение кода будет успешно подана, он будет отправлен на выбранный Вами email или телефон в течение 3-х дней.

После получения Auth-кода перейдите в панель управления в разделе напротив домена нажмите на и ввести полученый код в нашей панели.

Обращаем ваше внимание, что выбор регистратора производится на ваше усмотрение, однако мы рекомендуем перевести домены.RU/.РФ к нам на обслуживание, для того, чтобы наша компания могла нести полную ответственность перед вами и мы могли гарантировать вам качественные услуги.

Что касается международных доменов, на данный момент мы меняем поставщика услуг. Также мы получили аккредитацию ICANN, что позволит нам в скором времени обслуживать ваши домены в международных зонах непосредственно у нас.

Ru-center

Для получения Auth-code Вам необходимо перейти в специальную форму в личном кабинете NIC-D. Обязательным условием получение Auth-code является идентификация договора, то есть подтверждение регистрационных данных анкеты. Если Ваша анкета не идентифицирована, то у Вас высветится соответствующее уведомление в шапке формы для получения кода.


В этой форме необходимо ввести email, телефон и список доменов, для которых необходимо получить Auth-code. Также необходимо выбрать способ получения кода: на email, на телефон, лично в офисе RU-CENTER. Затем нажимаете "Продолжить" и ожидаете получения кода в зависимости от выбранного способа.

R01

Администраторы доменов Информация проверена » будет имеет значение «Да

Для юридических лиц:

Инструменты » открыть - «Кода переноса ».

  • 1. В письменном виде:

    офис к регистратору. Физическому лицу и ИП юридического лица неоходимо иметь при себе:



  • 2. email или sms-авторизация:

    Домены » -> «

Regtime

форму обратной связи

Salenames

Для получения кода для переноса домена необходимо зайти в свой личный кабинет у регистратора и убедиться, что данные анкеты проверены регистратором. В случае успеха - в разделе «Администраторы доменов » в подробной информации по администратору поле «Информация проверена » будет имеет значение «Да ». Если информация не проверена, то необходимо будет загрузить копии подтверждающих документов в одноимённом разделе.

Для физических лиц и индивидуальных предпринимателей:

  • Разворот паспорта с фото (обязательно),
  • Разворот паспорта с отметкой о постоянной регистрации (обязательно),
  • Разворот паспорта с отметкой о ранее выданном документе (если имеется)

Для юридических лиц:

  • Свидетельство о внесении записи о юридическом лице в Единый государственный реестр юридических лиц (Свидетельство ОГРН).

После того, как регистратор проверит данные, для получения кода необходимо кликнуть по имени нужного домена, после чего в блоке «Инструменты » открыть - «Кода переноса ».
Получить код можно одним из следующих способов:

  • 1. В письменном виде:

    Администратору домена необходимо в течение 3-х рабочих дней с момента оформления заявки на получение кода приехать в офис к регистратору. Физическому лицу и ИП при себе необходимо иметь паспорт, представителю юридического лица неоходимо иметь при себе:
    * руководителю юридического лица необходимо иметь при себе паспорт;
    * представителю юридического лица, не являющимся руководителем юридического лица, необходимо иметь при себе паспорт и доверенность на право совершать все необходимые действия, связанные с передачей обслуживания доменных имен иному регистратору;
    * копию Свидетельства о внесении записи о юридическом лице в Единый государственный реестр юридических лиц (Свидетельство ОГРН).


  • 2. email или sms-авторизация:

    В зависимости от способа авторизации на email или на телефон, предназначенный для смены регистратора, будет отправлено сообщение, содержащее ключ подтверждения заявки. Администратору домена нужно подтвердить заявку на получение кода переноса в личном кабинете в разделе «Домены » -> «Заявки на выдачу кода переноса для.RU, .РФ доменов »: найти соответствующую заявку и ввести полученный ключ.
    После подтверждения заявки будет автоматически сгенерирован Auth-code для переноса домена к другому регистратору.

Nethouse

Для получения кода необходимо авторизоваться в панели управления регистратора и перейти в раздел «Домены » -> «Управление ». Затем выберите имя домена для переноса и нажмите кнопку «Получить » в строке «AuthInfo».
В случае необходимости, заполните «Реквизиты для электронной смены регистратора » в меню навигации «Аккаунт » -> «Контактные данные ».

После этого необходимо выбрать один из способов получения Аuth-code: лично в офисе регистратора, по электронной почте или по SMS-сообщению.

AuthInfo-код будет сгенерирован и направлен на e-mail/sms (кроме случая личного визита в офис к регистратору).

Ardis

Для получения Auth-code Вам необходимо создать запрос в Центре поддержки Вашего аккаунта у регистратора.

Naunet

Получить код для переноса домена можно в офисе регистратора либо в "Системе управления услугами" с использованием e-mail - или sms -авторизации.
E-mail адрес и/или телефонный номер с возможностью приема sms для передачи доменов между регистраторами вносятся в Реестр по письму администратора домена и могут использоваться для переноса доменов администратора на протяжении всего действия договора. Формы писем для физических лиц (письмо надо заверить нотариально или подписать в офисе) и юридических лиц .

Администратор домена предоставляет письмо в офисе регистратора «Наунет СП» по адресу 125040, г.Москва, 1-я улица Ямского поля, д.19, стр.1 в «бумажном» виде. Электронные копии или ксерокопии документа не принимаются. Письмо должно быть составлено на русском языке или к письму должен прилагаться нотариально заверенный перевод на русский язык. Администраторы доменов, которые ранее предоставляли заявление о подключении услуги онлайн-передачи права администрирования доменов, могут предоставить скан Письма.

После получения и проверки предоставленных документов «Наунет СП» в течение 3-х рабочих дней вносит e-mail и/или номер телефона в Реестр.

После этого необходимо будет получить Auth-code в "Системе управления услугами " регистратора:

  • авторизоваться в Системе управления услугами
  • в разделе «Список услуг» нажать на имя домена
  • в интерфейсе управления доменом нажать «Запросить установку кода передачи поддержки домена другому регистратору»
  • выбрать способ получения кода просмотра
  • после получения кода просмотра ввести его в том же интерфейсе и получить AuthInfo-код домена.
  • Rd (Mastername)

    Для получения AuthInfo-кода необходимо выполнить следующие действия:

    • 1. Авторизоваться в Личном кабинете с Вашим логином и паролем (процедура восстановления пароля представлена на сайте).
    • 2. Заказать AuthInfo-код в разделе «Домены»:
    •           * поставить чекбокс напротив выбранного домена/доменов;
                * внизу выбрать массовую операцию: «Выдать AuthInfo».
    • 3.Выбрать один из возможных способов получения AuthInfo-кода:
    •           * с использованием sms-авторизации;
                * с использованием e-mail-авторизации;
                * предоставлением в письменной форме.

    Способ получения AuthInfo-кода выбирается в разделе «Настройки » → «Контактные данные для операций по трансферам доменов ».

    *    Если Вы выбираете способ получения AuthInfo-кода с использованием sms -авторизации, либо с использованием e-mail -авторизации – укажите в разделе «Настройки » e-mail, либо номер телефона.
    *     Если Вы выбираете способ предоставления AuthInfo-кода в письменной форме, ожидайте на контактный e-mail шаблон необходимого заявления и инструкции по получению AuthInfo-кода в офисе Регистратора.

    По умолчанию предлагается способ получения AuthInfo-кода по e-mail.

    • 4. Загрузить копии подтверждающих документов в Личном кабинете регистратора в разделе «Регистрационная информация »
    • 5. Получить AuthInfo-код в соответствии с выбранным способом связи. AuthInfo-код выдается в случае успешной идентификации Администратора домена в соответствии с предоставленными документами.

    Domenus

    Для получения кода необходимо заполнить заявление, отсканировать его и загрузить в Панели управления регистратора, в разделе «Домены » -> «Передача домена »:

    • физического лица
    • Заявление о передаче домена новому Регистратору от юридического лица
    • Заявление о передаче домена новому Регистратору от индивидуального предпринимателя

    К заявлению необходимо приложить отсканированную копию документа, идентифицирующего администратора домена.

    • Для физических лиц это копия паспорта (страницы с фотографией и пропиской).
    • Для Индивидуальных предпринимателей это копия паспорта (страницы с фотографией и пропиской), копию ИНН и ОГРНИП.
    • Для юридических лиц это копия выписки из ЕГРЮЛ, ИНН и ОГРН.
    Также необходимо выбрать способ получения кода: письменно в офисе , по e-mail или посредством sms -уведомления.

    Заявка на выдачу кода будет обработана регистратором в течение 3-х рабочих дней. По результатам проверки администратору домена сначала будет направлено уведомление для подтверждения переноса, а после его подтверждения сам код для переноса домена.

    Axelname

    Для получения кода переноса домена необходимо авторизоваться в личном кабинете у регистратора, перейти в раздел "Домены ", нажать на нужный домен, затем блоке "Перенос " нажать ссылку "Продолжить " и заполнить форму. Код будет выдан регистратором в течение 3-х дней.

    Webnames

    Для получения Auth-code Вам необходимо создать запрос через форму обратной связи Вашего аккаунта у регистратора.

«С 20 апреля 2017 года отправка запросов на авторизацию из встроенных браузеров будет блокироваться».
Такое сообщение с 1 марта можно увидеть в некоторых приложениях, где необходима авторизация. Об этом Google написали в своём блоге еще в августе 2016, и это значит, что скоро во многих приложениях придется переписывать реализацию регистрации. Приятного мало, однако выход есть – использовать рекомендуемый способ авторизации Google Sign-in.

Об этом способе и будет идти речь в уроке, а также как получить токены, необходимые для работы с API Google.

В уроке будет присутствовать частичный перевод официальных документаций. Но сперва немного предыстории из моей практики и первой работы с OAuth2, возможно кто-то окажется в похожей ситуации.

Понадобилось мне для приложения получить чат с прямой трансляции YouTube. И тогда я узнала, что для отправки запросов на получение трансляции (и только потом чата) необходимо провести OAuth2 аутентификацию пользователя. Я начала искать. Информации по такой теме очень мало, она разрознена, не подходила для моего случая, и конечно же всё было на английском языке. В основном информация была для работы с наиболее популярными API: Drive, Cloud, Google Plus. В официальной документации API YouTube есть готовый код, бери да пользуйся, однако для Android он не подходит. Потратив немалое количество времени, методом проб и ошибок я пришла к рабочему решению. Первое, что мне захотелось сделать после, это собрать информацию «в кучу» и разложить по полочкам, что и сподвигло на написание этого урока.

Изначально моё решение начиналось с того, что перед пользователем открывался WebView для авторизации (ввод email, пароля). Далее запрашивалось разрешение на использование данных, и только после разрешения в ответе приходил код аутентификации (AuthCode), подробнее что с ним делать будет далее. Url, который открывался в WebView был следующий:

Https://accounts.google.com/o/oauth2/auth? client_id=60*********5ad3np.apps.googleusercontent.com &redirect_uri=urn:ietf:wg:oauth:2.0:oob &access_type=offline&response_type=code &scope=https://www.googleapis.com/auth/youtube.readonly
Это ни что иное, как post запрос, в ответ на который приходила страница, содержащая authCode, причем код был в заголовке страницы. Всё, как по рекомендации к API, а действия для сокрытия этого кода от пользователя оставили на разработчика.

Перейдя по ссылке «Подробнее» попадаем в блог, где сказано, что во имя безопасности, аутентификация через WebView работать не будет с 20 апреля. Ну вот, думаю я, только сделала и придется переделывать через Sign-In. Причем первоначально я пыталась сделать реализацию именно через этот сервис. Однако с уже имеющимися знаниями «что и зачем» получилось довольно быстро. И так, начнем.

1. Получение учетных данных

В Диспетчере API создаем новый проект (или выбираем существующий):


Для авторизации понадобится файл конфигурации, который можно получить в мастере :


Заполняем поля название приложения и пакет. Далее выбираем какой сервис подключаем (Google Sign-In), здесь нужно ввести SHA1 ключ приложения, получить его просто: в Android Studio находим вкладку Gradle, раскрываем вкладки Tasks-android-signingReport. Щелкаем два раза, и в логах появится информация о ключах. Находим ключ SHA1, копируем.



Жмем кнопку «Generate configuration file», а после «Download google-services.json». Этот файл json сохраняем в папку проекта «app».

Важно! Если вы собираетесь публиковать приложение в Google Play, debug ключ SHA1 нужно будет заменить на release ключ, соответственно и заменить файл конфигурации.

Заходим в Диспетчер API, видим, что сгенерировались ключи и идентификаторы клиентов OAuth. Нам понадобятся только данные Web client (идентификатор клиента и секрет клиента).


Во вкладке «Окно запроса доступа OAuth» можно поменять email и название продукта - это то, что будет написано, когда будет запрашиваться разрешение «Приложение **** запрашивает: …»

2. Настройка Sign-In клиента

Чтобы получить доступ к Google Api Client, в файл gradle app нужно добавить в зависимости:

Compile "com.google.android.gms:play-services-auth:10.2.0"
И плагин (в конец файла):

Apply plugin: "com.google.gms.google-services"
В файл gradle project в зависимости:

Classpath "com.google.gms:google-services:3.0.0"
Настраиваем опции:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestServerAuthCode(getString(R.string.server_client_id)) .requestEmail() .requestScopes(new Scope("https://www.googleapis.com/auth/youtube.readonly")) .build();
Здесь наибольший интерес вызывают строки:

RequestServerAuthCode(getString(R.string.server_client_id)) – запрашиваем authCode, передавая параметр идентификатор клиента (весь полностью), который получили выше.

RequestScopes(new Scope("***")) – запрашиваем необходимую для используемого API область/области доступа. Есть некоторые уже определенные области в Scopes, но, если нужной там не нашлось, можно задать свою, как в моём случае. Для пользователя будет отображаться как доступ «к чему» хочет получить приложение.

Настраиваем клиент:

GoogleApiClient mApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this, this) .addApi(Auth.GOOGLE_SIGN_IN_API, gso) .build();
Тут всё по стандарту из документации:

EnableAutoManage(this, this) – в параметры передается активити и слушатель соединения (реализуем интерфейс GoogleApiClient.OnConnectionFailedListener).

AddApi(Auth.GOOGLE_SIGN_IN_API, gso) – указываем, что используем Sign In api и ранее созданный объект опций.


Выглядит она так:

В активити кнопка определяется как и все другие view, на нее повешаем слушатель и по клику выполним метод:

@Override public void onClick(View view) { switch (view.getId()) { case R.id.activity_button_sign_in: signIn(); break; } }
Код вызываемого метода представляет собой создание интента и вызов активити для авторизации:

Public void signIn() { Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mApiClient); startActivityForResult(signInIntent, RC_AUTH_CODE); }
В параметр передаем сконфигурированный mApiClient. RC_AUTH_CODE любое число, как и всегда, для отслеживания результата активити.

При нажатии на копку, будет предложено выбрать аккаунт для входа, либо добавить новый. После выбора, приложение запросит разрешение:


3. Получение Auth code

После того, как пользователь даст разрешение, в onActivityResult получаем данные его аккаунта:

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == RC_AUTH_CODE) { GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); if (result.isSuccess()) { GoogleSignInAccount acct = result.getSignInAccount(); String authCode = acct.getServerAuthCode(); getAccessToken(authCode); } } }
В результате получаем auth code как обычную строку, выглядит он примерно так:

4/iHhVmqtxccXh0Qs*********oo5XG8OjaNsWu_kEKyw
Так же из аккаунта можно получить email пользователя, username и аватарку:

Acct.getEmail()
acct.getDisplayName()
acct.getPhotoUrl()

Эти данные могут понадобиться, например, чтобы вставить их в header NavigationView.

4. Получение Access Token и Refresh Token

Получили auth code, теперь его нужно поменять на необходимые для запросов к API токены. Для этого формируем запрос по адресу https://www.googleapis.com/oauth2/v4/token. Например я сделаю это с помощью OkHttp.

Public void getAccessToken(String authCode) { OkHttpClient client = new OkHttpClient(); RequestBody requestBody = new FormEncodingBuilder() .add("grant_type", "authorization_code") .add("client_id", getString(R.string.server_client_id)) .add("client_secret", getString(R.string.client_secret)) .add("code", authCode) .build(); final Request request = new Request.Builder() .url("https://www.googleapis.com/oauth2/v4/token") .header("Content-Type", "application/x-www-form-urlencoded") .post(requestBody) .build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) {} @Override public void onResponse(Response response) throws IOException { try { JSONObject jsonObject = new JSONObject(response.body().string()); mAccessToken = jsonObject.get("access_token").toString(); mTokenType = jsonObject.get("token_type").toString(); mRefreshToken = jsonObject.get("refresh_token").toString(); } catch (JSONException e) { e.printStackTrace(); } } }); }
Рассмотрим подробнее параметры. В Request.Builder() Передаем url по которому получаем токены:

Url("https://www.googleapis.com/oauth2/v4/token")
В header указываем Content-Type:

Header("Content-Type", "application/x-www-form-urlencoded")
Указываем, что это метод POST, в него передаем body:

Post(requestBody)
Сформированный requestBody обязательно должен содержать параметры:

"grant_type", "authorization_code" – указываем, что передавать будем auth code
"client_id", getString(R.string.server_client_id) – параметр является client id, полученный в Диспетчере API
"client_secret", getString(R.string.client_secret) - секрет клиента, полученный в Диспетчере API
"code", authCode – собственно полученный код.

Запрос асинхронный, в ответе получаем обычный json со всеми нужными для работы данными:

{ "access_token":"ya29.GlsfBJNMTfGy…", "token_type":"Bearer", "expires_in":3600, "refresh_token":"1\/72OqA7zYuyY__XhGij5oA2nEb7…", "id_token":"eyJhbGciOiJSUzI1NiIsImtpZ…" }
"access_token" – токен доступа, ради которого всё проводилось
"expires_in" – время жизни access токена, по умолчанию токен живет 1 час, а в сутки можно получать по запросу 25 токенов, не более.
"token_type" – тип токена, его тоже необходимо запомнить, он также вставляется в запрос к api в дальнейшем.
"refresh_token" – токен для обновления access токена, когда пройдет час жизни. Refresh токен неизменен. Часто на форумах видела проблему, с которой сталкивалась и сама: в запросе не приходил этот токен. Ошибки заключаются в неправильном получении учетных данных, либо неправильные запросы. Если авторизация проводилась через WebView, и в url не указывался такой важный параметр как access_type=offline, то refresh токен попросту не приходил.

5. Обновление Access токена

Час прошел, access токен больше не активен, необходим новый. После этого посыпятся ошибки 401 или 403, сервер скажет, что пользователь не авторизован или не имеет доступа. Запрашивать новое разрешение не годится, если нам нужна непрерывная сессия, например как у меня, нужно непрерывно получать сообщения из чата в течении трансляции, а это несколько часов. Что делать? Посылать запрос на получение нового токена.

Запрос в основном такой же как в пункте 4, за исключением некоторых параметров:

Private void getNewAccessToken() { OkHttpClient client = new OkHttpClient(); RequestBody requestBody = new FormEncodingBuilder() .add("refresh_token", mRefreshToken) .add("client_id", getString(R.string.server_client_id)) .add("client_secret", getString(R.string.client_secret)) .add("grant_type", "refresh_token") .build(); final Request request = new Request.Builder() .url("https://www.googleapis.com/oauth2/v4/token") .header("Content-Type", "application/x-www-form-urlencoded") .post(requestBody) .build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) {} @Override public void onResponse(Response response) throws IOException { try { JSONObject jsonObject = new JSONObject(response.body().string()); mAccessToken = jsonObject.get("access_token").toString(); } catch (JSONException e) { e.printStackTrace(); } } }); }
Здесь важные параметры:

"grant_type", "refresh_token" – в типе указываем что посылаем refresh токен
"refresh_token", mRefreshToken – и сам токен

Ответом будет json, содержащий новый access токен, с которым снова можно обращаться к API:

{ "access_token":"ya29.GlsfBM7Y...", "token_type":"Bearer", "expires_in":3600, "id_token":"eyJhbGciOiJ..." }
На этом авторизация и аутентификация пользователя завершена.

Для примера покажу как выглядит запрос к API, а также как я выполняю обновление токена.
Для запроса к API я использую Retrofit2 + RxAndroid. Так выглядит запрос на получение чата прямой трансляции:

@GET(GoogleApiUrls.Youtube.CHAT) Observable getChat(@Header("Authorization") String token, @Query("liveChatId") String liveChatId, @Query("part") String part);
Здесь важно заметить, что в header по ключу Authorization должны передаваться тип токена и сам access токен. То есть так:

Authorization Bearer ya29.GlsfBJNMTfGy…
Далее делаю запрос через RxAndroid, и так как в коллбэк onError приходят всевозможные ошибки, то туда же приходит ошибка HttpException с кодом 401 Unauthorized по истечении часа. Здесь же я обрабатываю её, проверяю, если это та самая ошибка, то привожу к соответствующему типу, проверяю действительно ли это код 401 и выполняю метод получения нового токена, затем повторяю запрос.

@Override public void onError(Throwable e) { if (e instanceof HttpException) { HttpException exception = (HttpException) e; if (exception.code() == 401) { getNewAccessToken(); } } }
Так же для проверки токена существует GET запрос:

Https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=ya29.GlsfBJNMTfGy…
В ответ придут данные о токене, если он еще активен, либо ошибка, если его время жизни истекло.

Опять же, реализацию обновления токена Google оставляет на разработчика.

Рекомендую перед началом работы проверять запросы в стороннем приложении/расширении, например Postman, чтобы убедиться в правильности ввода параметров и полученных ответах. Я буду очень рада, если кому-то урок окажется полезным!

  1. Отправьте запрос на получение кода переноса из → Перенос доменов .
  2. На контактный e-mail администратора домена будет отправлено письмо с инструкцией и ссылкой для подтверждения. Перейдите по ссылке для подтверждения переноса.

Процедура смены регистратора для доменов.ru и.рф не осуществляется в следующих случаях:

  • до окончания срока регистрации осталось менее семи дней;
  • не пройдена ;
  • в отношении доменного имени установлены судебные или досудебные ограничения;
  • администратор домена не предоставил дополнительные сведения по запросу RU-CENTER в установленный срок;
  • прошло менее 30 дней с момента смены администратора;
  • прошло менее 30 дней с момента последней смены регистратора.

Перенос доменов.su, .net.ru, .org.ru, .pp.ru к другому регистратору

Для переноса домена.su, .net.ru, .org.ru, .pp.ru к другому регистратору предоставьте оригинал заявления в RU-CENTER.

Оригинал заявления можно доставить:

  • в :
    - Москва, Ленинградский проспект, д.74, корп.4
    - Санкт-Петербург, ул. Маршала Говорова, д.35, корп.5, лит. Ж, 4 этаж, офис 401
  • письмом на

Перенос международных, зарубежных, доменов New gTLD, .com.ru, .ru.net, .msk.ru и других геодоменов к другому регистратору

1. Снимите блокировку на перенос домена.

  • зайдите в , указав номер договора и пароль;
  • выберите Услуги Мои домены ;
  • проверьте статус в строке Смена регистратора . Если статус Запрещена , нажмите ссылку с именем домена;
  • на открывшейся странице нажмите ссылку Изменить ;
  • снимите выделение в поле Смена регистратора запрещена . Нажмите кнопку Сохранить изменения .

Для получения кода отправьте заявку на адрес с указанием домена и просьбой предоставить код для переноса домена к другому регистратору. В ответ вам будет отправлена ссылка для авторизации. После прохождения авторизации код будет отправлен на e-mail.

Если у вас подключена услуга Передачи прав онлайн , то код можно получить в личном кабинете. Для этого:

  • зайдите в в , указав номер договора и пароль;
  • выберите Услуги Мои домены ;
  • нажмите ссылку с именем домена;
  • в столбце Настройки в пункте Код авторизации нажмите Получить ;
  • в открывшемся окне нажмите Выслать одноразовый пароль ;
  • ввести одноразовый пароль.

3. Обратитесь к новому регистратору для запуска переноса домена.

Сообщите новому регистратору код авторизации реестра. Новый регистратор запускает перенос домена в реестре. Реестр уведомляет RU-CENTER о начале процесса переноса домена, после чего RU-CENTER отправляет письмо на контактный e-mail администратора с информацией о переносе. В письме также содержится ссылка для отказа от переноса. Если в течение 3 календарных дней от администратора не получен отказ, то перенос завершается автоматически по истечении 5 календарных дней с момента начала переноса. После окончания переноса доменное имя удаляется из базы RU-CENTER.

Важно:
Если международный или зарубежный домен был снят с делегирования по причине окончания срока регистрации и затем продлен, смену регистратора лучше осуществлять через 45 дней после продления. Иначе год, добавленный прежним регистратором по факту продления, может быть обнулен, и срок регистрации у нового регистратора будет увеличен только на один год, а не на два.

Процедура смены Регистратора для международных и зарубежных доменов не осуществляется в следующих случаях:

  • не прошло 60 дней с момента регистрации или смены Регистратора домена;
  • не прошло 60 дней с момента последней смены регистратора;
  • не прошло 60 дней с момента передачи прав или смены e-mail администратора домена;
  • домен заблокирован реестром или текущим регистратором.

Регистратор, к которому вы решите перенести доменное имя, может запросить у вас код авторизации (также известный как EPP-код или ключ передачи). Он позволит убедиться, что доменное имя принадлежит именно вам.

Для многих национальных доменных имен верхнего уровня (ccTLD) код авторизации не требуется. Однако в редких случаях вам нужно будет обратиться за ним в службу поддержки GoDaddy. Подробную информацию см. в статье.

Обязательное требование. Если вы добавили Защищенную регистрацию и включили в аккаунте двухэтапную аутентификацию, то сможете получить код авторизации только через 72 часа.

Вы не вошли в аккаунт. Чтобы вам не пришлось совершать лишние действия, выполните вход в верхней части страницы (рядом со значком ).

  1. Нажмите на нужное доменное имя. Откроется страница Domain Settings (Настройки домена).
  • На странице Domain Settings (Настройки домена) нажмите Get Authorization Code Additional Settings
    1. Перейдите на страницу Domain Settings (Настройки домена).
    2. На странице Domain Settings (Настройки домена) нажмите Get Authorization Code (Получить код авторизации) в разделе Additional Settings (Дополнительные настройки). Мы отправим код на электронный адрес администратора домена.

    регистранта .

    Примечание. Если вы измените название организации либо имя и фамилию

    Если административный представитель не получит код авторизации в течение 24 часов, скачайте его. О том, как это сделать, рассказано в статье.


    Для многих национальных доменных имен верхнего уровня (ccTLD) код авторизации не требуется. Однако в редких случаях вам нужно будет обратиться за ним в службу поддержки GoDaddy. Подробную информацию вы найдете в статье .
    1. Войдите в аккаунт и перейдите на страницу My Products (Мои продукты).
    2. Если вкладка My Products (Мои продукты) не откроется автоматически, выберите ее самостоятельно.
    3. Рядом с нужным доменом нажмите Manage (Управление).
    4. Откройте страницу Domains Settings (Настройки домена). В разделе Contact Information (Контактная информация) нажмите Edit (Редактировать).
    5. Проверьте контактные данные администратора . Мы отправим код авторизации ему на электронную почту.
    6. Примечания

    Если вы не видите контактные данные административного представителя , снимите флажок Use for all contact types ("Использовать для всех типов контактов").
    Для доменных имен.at, .au и.eu мы отправляем код авторизации на контактный адрес электронной почты регистранта .

    Примечание. Если вы измените название организации либо имя и фамилию в контактных данных регистранта, то доменное имя можно будет перенести не ранее чем через 60 дней.

  • Прокрутите экран вниз до раздела Additional Settings (Дополнительные настройки). Нажмите на ссылку Authorization code (Код авторизации).
  • Проверьте электронную почту. Мы отправим код авторизации в течение 24 часов.
  • Если код авторизации не пришел

    Если административный представитель не получит код авторизации в течение 24 часов, просто .



    Есть вопросы?

    Сообщить об опечатке

    Текст, который будет отправлен нашим редакторам: