Google OAuth 2: доступ до даних користувача Google у вашій програмі

  1. Щоб налаштувати проект, виконайте наступні дії:
  2. oAuth Flow
  3. Жетони
  4. Генерування маркерів
  5. Отже, що краще обійти з цими маркерами?

Отже, ви хочете отримати доступ до даних користувача Google у вашій програмі. Для цього користувач повинен дозволити вашій програмі працювати як користувач. Хоча це виглядає просто, натиснувши "Прийняти" на підказку для входу, відбувається набагато більше, ніж просто це. Звичайно, Google має документацію про те, як працює ця авторизація, але вона ускладнюється, коли вони починають говорити про символи оновлення, маркери доступу, час закінчення, секрет клієнта тощо.

Перш за все, давайте почнемо з перегляду облікового запису Google. У Google є багато різних служб.
Перш за все, давайте почнемо з перегляду облікового запису Google

Коли ви створюєте обліковий запис Google, ви автоматично можете використовувати свій обліковий запис для Gmail, Chrome, Youtube, Карт Google, Google Play і Google+. Зрештою ви можете скористатися іншими службами Google, увійшовши в обліковий запис Google.

Щоб налаштувати проект, виконайте наступні дії:

Майте на увазі наступне:

  • Ми хочемо отримати доступ до даних від невідомого користувача
  • Ми будуємо веб-додаток
  1. Створіть обліковий запис розробника на https://console.developers.google.com/
  2. Увійдіть до свого облікового запису розробника за адресою https://console.developers.google.com/
  3. Натисніть "Створити проект"
  4. Заповніть назву проекту
    .
    Необов'язково: нижче “” Показувати додаткові параметри ”ви можете вибрати, де буде працювати проект. Або в США, або в Європі
  5. Натисніть "Створити".
    Google тепер створить ваш проект, це займе хвилину.
  6. У лівому меню виберіть "API & auth"> "Екран згоди"
    Екран згоди - це запит автентифікації для користувача, коли він хоче використовувати вашу програму.
  7. Виберіть для адреси електронної пошти обліковий запис розробника та заповніть назву продукту. Усі інші поля є необов'язковими.
  8. Натисніть "Зберегти".
  9. Виберіть у лівому меню "API & auth"> "API"

    Тут ви можете додати API до вашого проекту, щоб отримати доступ до різних служб Google.
  10. Виберіть або знайдіть потрібний API.
  11. Натисніть "Увімкнути API",
  12. Виберіть у лівому меню "API & auth"> "Облікові дані"

    Тут ви створите маркери аутентифікації для вашої програми.
  13. Натисніть "Створити новий ідентифікатор клієнта".
  14. Виберіть "Веб-додаток".
  15. У розділі "Авторизовані джерела JavaScript" заповніть адресу хосту веб-програми. Це може бути лише одна URL-адреса.
  16. У розділі "Уповноважені ідентифікатори авторизованих переадресацій" заповніть шлях URL-адреси, в якому потрібно виконати аутентифікацію.
  17. Натисніть "Створити ідентифікатор клієнта"

Тепер сталося, що ми створюємо облікові дані для нашої програми для доступу до проекту API.
Тепер сталося, що ми створюємо облікові дані для нашої програми для доступу до проекту API
За допомогою ідентифікатора клієнта та секретної інформації клієнта ваша програма може підключитися до вашого проекту Google

На даний момент це марно, оскільки немає користувачів, які б авторизували вашу програму для доступу до їхніх даних.

oAuth Flow

Наступний крок полягає в тому, щоб дозволити користувачам авторизувати вашу програму для доступу до їхніх даних. Саме тут пройде потік oAuth2.0.
Потік існує з 2 кроків:

  1. Створити URL-адресу для входу
  2. Код для входу в Exchange

Користувач повинен увійти до своєї програми. Ви повинні використовувати певну URL-адресу для входу користувача. Google oAuth має свою власну структуру. Кінцевою точкою для входу Google є https://accounts.google.com/o/oauth2/auth
Сам URL не достатньо. Для цього потрібні деякі параметри. Усі параметри можна знайти за адресою https://developers.google.com/identity/protocols/OAuth2WebServer#formingtheurl
Для вашої веб-програми достатньо використовувати такі параметри:

  • redirect_uri: URL-адреса, на яку буде перенаправлено користувача після входу. Ця URL-адреса має бути зареєстрована у вашому проекті Google у консолі розробників Google. Якщо це не так, ви отримаєте помилку "redirect_uri_mismatch"
  • response_type: визначає, чи Google Oauth поверне код. Веб-додаток має використовувати цю опцію.
  • client_id: Ідентифікатор клієнта, створений для веб-програми в консолі розробників Google.
  • scope: визначає, до якого API бажано отримати доступ. Повний перелік областей відвідування https://developers.google.com/oauthplayground/ Примітка: Adwords немає у списку. Обсяги adwords https://www.googleapis.com/auth/adwords
  • approval_prompt: Вказує, чи повинен користувач завжди приймати вашу програму, перш ніж продовжувати.
  • access_type: Вказує, чи хоче програма звертатися до облікового запису користувача, якщо користувач увійшов до системи чи ні.

Наприклад, нижче ви побачите URL-адресу аутентифікації, щоб дозволити моєму веб-програмі читати всі дані Google Analytics і адресу електронної пошти від користувача. Для мого веб-програми я також хочу отримати доступ до його даних, навіть коли користувач не перебуває в мережі.

Примітка. Не забувайте додавати аналітику Google як API для вашого проекту

Приклад URL з рядками для читання:

https://accounts.google.com/o/oauth2/auth? redirect_uri = http: //www.mywebapp.com/oauth2callback&dress_type = код & client_id = 104608secret-secret-secret-secret.apps.googleusercontent.com & scope = https: //www.googleapis.com/auth/analytics.readonly+https : //www.googleapis.com/auth/userinfo.email& approval_prompt = force & access_type = офлайн

При відвідуванні URL-адреси користувачеві потрібно спочатку ввійти до свого облікового запису Google. Коли користувач увійшов до системи, користувач побачить ваш екран згоди (у нашому випадку він знаходиться на голландській мові).
При відвідуванні URL-адреси користувачеві потрібно спочатку ввійти до свого облікового запису Google

Коли користувач натискає на кнопку "Прийняти", Google переадресує користувача на вказаний вами файл redirect_url з кодом у GET. URL буде виглядати так:

http://www.mywebapp.com/oauth2callback?code=4/gXCN77EWLDCOfakep2tvfakezOg6Mn0fakej2vA.giyP3fakejxeAeYFZr95uygvU3j0dumQI

У вашій заявці ви повинні отримати код із запиту. Наступним кроком є ​​надсилання запиту POST серверу Google, щоб отримати облікові дані користувача та перевірити, чи ваша програма може отримати доступ до даних користувача.
Запит POST повинен містити такі параметри

  • Код: код авторизації з запиту GET
  • Client_id: ідентифікатор клієнта, створений для веб-програми в консолі розробників Google.
  • Client_secret: клієнтська таємниця, створена для веб-програми в консолі розробників Google.
  • Redirect_uri: URL-адреса, на яку буде перенаправлено користувача після входу. Ця URL-адреса має бути зареєстрована у вашому проекті Google у консолі розробників Goolge.
  • Grant_type: Визначає тип повернутого маркера. У цьому прикладі значення завжди є авторизаційним кодом

Адреса POST має бути https://accounts.google.com/o/oauth2/token і також знадобиться заголовок з Content-Type: application / x-www-form-urlencoded

Запит POST буде виглядати наступним чином:

POST / o / oauth2 / token HTTP / 1.1 Хост: accounts.google.com Тип вмісту: application / x-www-form-urlencoded code = 4 / gXCN77EWLDCO_fake_p2tvfakezOg6Mn0fakej2vA.giyP3fakejxeAeYFZr95uygvU3j0dumQI & client_id = 104608 .com & client_secret = 90V0FAKE_WkFAKExrHCZti & redirect_uri = http: //www.mywebapp.com/oauth2callback & grant_type = author_code

Відповідь на запит поверне масив JSON. Масив JSON буде містити такі поля.

  • Access_token: маркер, який надасть вам доступ до облікового запису користувача
  • Refresh_token: маркер, який можна використовувати для отримання нового маркера доступу. Це поле присутнє, лише якщо access_type = offline включено до запиту коду авторизації.
  • Expires_in: залишковий час життя маркера доступу в секундах
  • Token_type: Ідентифікує тип повернутого маркера. У цьому прикладі завжди буде мати значення Bearer
  • Id_token: містить інформацію про обліковий запис користувача. Буде присутнє лише якщо ваша програма хоче знати інформацію про користувача. Залежить від обсягу |

Приклад запиту поверне щось на зразок цього:

{"Access_token": "1 / fjfKDe9irjnfAJDFkjFDKjreoijf", "expire_in": 3920, "token_type": "Носій" "refresh_token": "4 / NdkereoIjnrOIKJMNFI39KEJRNF" "id_token": {"email": }

Ваша програма тепер готова до доступу до даних від користувача. При спробі підключення до API вам завжди доведеться передавати облікові дані oAuth 2 API. Користувач може перейти до https://myaccount.google.com і логін. Користувач може прокручувати вниз до "Підключені програми та служби" і натиснути "Дозволи на обліковий запис".
Ваша програма тепер готова до доступу до даних від користувача

Тепер користувач може побачити список програм, яким дозволено доступ до його даних. Вибравши програму та натиснувши на правій панелі на "Скасувати доступ", користувач вимкне програму, щоб отримати доступ до його даних. Тепер, коли ми увійшли в систему і отримали доступ до даних, ми отримали наступні дані.
Тепер користувач може побачити список програм, яким дозволено доступ до його даних

Маркер доступу дозволить вашій програмі отримувати доступ до даних від користувача.

Жетони

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

В основному нам потрібен access_token для доступу до даних користувача. Недоліком access_token є те, що він закінчується приблизно через одну годину. Це означає, що зберігання access_token марно. Ви будете використовувати тільки access_token для одноразового сеансу. Щоб вирішити цю проблему, Google створив refresh_token. Цей маркер дозволяє генерувати новий access_token для вашої програми. Це дозволяє вашій програмі створювати нову сесію для доступу до даних користувача в будь-який час.

Щоб отримати refresh_token, ви повинні включити access_type = offline у ​​запит авторизації на кроці 1 потоку Oauth2. Оновлення refresh_token буде створено лише вперше, коли користувач прийме вашу програму для доступу до ваших даних. Якщо користувач вже прийняв вашу заявку і повернеться інший раз і знову прийме вашу заявку. Оновлення refresh_token не генерується. Користувач повинен спочатку скасувати вашу програму. Після того, як користувач скасував вашу програму, а потім увійшов до системи та прийняв вашу програму, генерується новий refresh_token.

Також можна скасувати доступ до програми, надіславши запит GET. GET запит повинен бути надісланий https://accounts.google.com/o/oauth2/revoke з маркером як параметром. Цей маркер може бути або refresh_token, або access_token.

Приклад:
https://accounts.google.com/o/oauth2/revoke?token=1/fjfKDe9irjnfAJDFkjFDKjreoijf
Виконавши запит, він скасує програму від користувача, до якого належить маркер.

Генерування маркерів

Для вашої програми спеціально генеруються access_token або refresh_token. Це означає, що ви не можете використовувати ці маркери для доступу до облікового запису користувача з іншою програмою або для різних служб. Це означає, що якщо ви додаєте нові API до програми, користувач повинен прийняти вашу програму.

Отже, що краще обійти з цими маркерами?

Refresh_token з правильними client_id і client_secret дозволить іншим користувачам використовувати вашу програму для доступу до послуг облікового запису користувача. Деякі Google API дозволяють програмно додавати або видаляти матеріали користувача. Перше, що потрібно запобігти, це те, що ви повинні розглянути те, що ви хочете зробити з обліковим записом. Подібно до аналітики Google, коли потрібно лише отримати дані, які слід використовувати https://www.googleapis.com/auth/analytics.readonly як обсяг, тільки у випадку, якщо ваші параметри просочилися, інші користувачі можуть отримувати лише дані Google Analytics.

По-друге, ви зберігаєте клієнт-кліент та клієнт-секрет у різних місцях, ніж ваш вихідний код. Також не зберігайте їх у тому самому місці, де витягуються refresh_tokens.

Третя річ, яку ви повинні зробити, це скинути ваш клієнт-секрет один раз. Це можна зробити в консолі розробника на ділянці облікових даних.

Com/o/oauth2/auth?
Com/oauth2callback?
Com/o/oauth2/revoke?
Отже, що краще обійти з цими маркерами?