Uk:OAuth
Якщо ви знаєте про поточний стан справ, будь ласка, допоможіть іншим, оновивши цю інформацію. (Discussion)
OAuth в OpenStreetMap — це механізм, який дозволяє користувачам авторизувати програми сторонніх розробників, щоб вони могли виконувати дії з їхнім обліковим записом OSM без потреби передавати пароль користувача. Правила поводження з обліковими даними користувачів рекомендують розробникам програм використовувати OAuth, а не HTTP Basic Auth або інші методи доступу до API.
Використання розробниками
Ви можете зареєструвати власний застосунок на сторінці налаштувань учасника OpenStreetMap: налаштування OAuth 1 або застосунки OAuth 2, у верхній частині сторінки. OpenStreetMap підтримує OAuth 1.0a та 2.0. Для будь-якого нового застосунку слід використовувати OAuth 2.0. Наразі термін дії токенів доступу не закінчується автоматично.
Переконайтеся, що для використання API сервера для розробників ви також створили обліковий запис на цьому сервері. Стандартний сервер і сервер для розробників не використовують спільну базу даних. Отже, вам потрібно створити обліковий запис з новим ім’ям користувача та паролем і використовувати його ключ абонента та секретний ключ.
OAuth 1.0a
Ось відповідні URL-адреси:
- Request Token URL: https://www.openstreetmap.org/oauth/request_token
- Access Token URL: https://www.openstreetmap.org/oauth/access_token
- Authorize URL: https://www.openstreetmap.org/oauth/authorize
Для розробки та тестування, використовуєте екземпляр API для розробників, який також має точки входу OAuth. Ось посилання на них:
- Request Token URL: https://master.apis.dev.openstreetmap.org/oauth/request_token
- Access Token URL: https://master.apis.dev.openstreetmap.org/oauth/access_token
- Authorize URL: https://master.apis.dev.openstreetmap.org/oauth/authorize
Для видачі дозволів застосункам існує наступний перелік.
OAuth 2.0
Підтримувані типи Дозволів: Код авторизації, Код авторизації з PKCE
Додайте дані авторизації до заголовків запитів
Production:
- Auth URL: https://www.openstreetmap.org/oauth2/authorize
- Access Token URL: https://www.openstreetmap.org/oauth2/token
Development:
- Auth URL: https://master.apis.dev.openstreetmap.org/oauth2/authorize
- Access Token URL: https://master.apis.dev.openstreetmap.org/oauth2/token
Підтримувані сфери застосування:
Примітка: назви сфер застосування є відмінними від дозволів, що використовуються в OAuth 1.0a: раніше використовувався префікс "allow_", який зараз відкинуто
- read_prefs: читання налаштувань користувача
- write_prefs: зміна налаштувань користувача
- write_diary: створення дописів щоденника, додавання коментарів та друзів
- write_api: редагування мапи
- read_gpx: читання приватних GPS-треків
- write_gpx: надсилання GPS-треків на сервер
- write_notes: редагування нотаток
Основна ідея
Застосунок, наприклад, JOSM, або вебсайт, такий як OSMCha, буде отримувати дозвіл на внесення змін в дані OpenStreetMap від імені користувача.
OAuth використовується також іншими сайтами, наприклад twitter або flickr. Якщо ви, наприклад, користуєтесь застосунком завантаження фото у flickr, ви можете побачити, як авторизація працює з точки зору користувача. Коли ви намагаєтесь скористатись застосунком, ви перенаправляєтесь до вебсайту, де ви виконуєте звичайний вхід та надаєте дозвіл. Застосунок отримує токен, який він може використовувати у своїх запитах до сервера. Це усуває потребу зберігати будь-які логіни та паролі в самому застосунку. Ловко.
Розробникам
OAuth 1.0a
Дивіться OAuth examples щоб знайти приклади коду та посилання на інструменти для роботи з ними різними мовами програмування для створення програм-клієнтів OpenStreetMap з підтримкою авторизації через OAuth.
Реєстрація вашого застосунку як абонента OAuth 1.0a
Перед тим, як застосунок зможе використовувати протокол OAuth для авторизації доступу до захищених ресурсів на серверах OSM, його потрібно зареєструвати як абонента OAuth. Кожен зареєстрований користувач може зареєструвати застосунок як абонента.
- Увійдіть до свого облікового запису
- Перейдіть за посиланням https://www.openstreetmap.org/user/username/oauth_clients/new
В наступній формі зазначте чотири параметри:
- Назва/Name
- це назва вашої програми, яка буде показуватись користувачеві.
- Основний URL застосунку (Обов’язково)/Main Application URL (Required)
- це URL-адреса з інформацією про ваш застосунок. Ці дані взагалі не пов'язані з протоколом OAuth. Коли користувач авторизує доступ із вашої програми на вебсайті OSM, на вебсайті OSM буде показуватись посилання <a href="info-url-to-your-app">Назва вашої програми</a>.
- URL зворотного виклику/Callback URL
- коли ви реєструєте вебзастосунок, ви можете зазначити URL зворотного виклику за яким вебсайт OSM перенаправить користувача після процедури обміну даними OAuth (OAuth handshake). Це посилання є опціональним. Залиште це поле порожнім, якщо ваш вебзастосунок не має URL зворотного виклику. У разі реєстрації повноцінного застосунку ви можете залишити це поле порожнім або ж вказати посилання на сторінку де буде щось на кшталт "закрийте цю сторінку в оглядачі та перейдіть до застосунку".
- URL підтримки/Support URL
- можете залишити порожнім.
Основи протоколу
- ви реєструєте застосунок (абонента) та передаєте йому токени CONSUMER_KEY + CONSUMER_SECRET
- користувач запускає ваш застосунок, він звертається за токеном – Request Token URL та отримує: oauth_token + oauth_token_secret
- потім він перенаправляє користувача на Authorize URL + '?oauth_token=' + oauth_token
- користувач виконує вхід на OpenStreetMap.org, сайт просить надати дозволи
- якщо URL зворотного виклику було вказано під час реєстрації, користувач перенаправляється на Callback URL + '?oauth_token=' + той_же_oauth_token + '&oauth_verifier=' + значення_для_отримання_access_token
- ваш застосунок отримує той же oauth_token, звертається до Access Token URL та отримує receives: access_token + access_token_secret
- токен доступу (access token) та його секретний ключ використовуються для подальшого обміну даними
OAuth 2.0
Реєстрація вашого застосунку як абонента OAuth 2.0
Перед тим, як застосунок зможе використовувати протокол OAuth для авторизації доступу до захищених ресурсів на серверах OSM, його потрібно зареєструвати як абонента OAuth. Кожен зареєстрований користувач може зареєструвати застосунок як абонента.
- Увійдіть до свого облікового запису
- Перейдіть за посиланням https://www.openstreetmap.org/oauth2/applications/new
- Назва/Name
- це назва вашої програми, яка буде показуватись користувачеві.
- URI Переспрямування/Redirect URI
- Список дозволених URI, до яких користувач може бути перенаправлений після авторизації програми. Усі URI мають використовувати протокол https, якщо не використовується URL, що починається з http://127.0.0.1. Спеціальний URI urn:ietf:wg:oauth:2.0:oob слід використовувати для невебзастосунків, де користувачу треба скопіювати код авторизації в застосунок.
- Конфіденційність застосунку/Confidential application
- Застосунок використовуватиметься там, де секретний ключ клієнта може надійно зберігатися (мобільні застосунки та односторінкові програми не є конфіденційними)
- Дозволи/Scopes
- Оберіть потрібні дозволи, які можуть знадобитись застосунку-абоненту
Основи протоколу
- Зареєструйте застосунок, вкажіть його назву, URI перенаправлення та дозволи. Потім отримайте ідентифікатор клієнта та секретний ключ клієнта. Як правило, ці налаштування зберігаються в клієнтському застосунку.
- Коли користувач входить до облікового запису через застосунок, він має спочатку увійти на сайт OSM для підтвердження особи через звернення до Auth URL і застосунок-абонент перенаправляється на
<REDIRECT_URI>?code=AUTHORIZATION_CODE
, де застосунок отримує код авторизації, (<REDIRECT_URI> зазначається під час реєстрації застосунку) - Токен доступу запитується застосунком-абонентом через Access Token URL шляхом передачі коду авторизації разом з інформацією про автентифікацію користувача, включаючи секретний ключ.
- В ході успішної авторизації OSM API надсилає токен доступу до застосунку. Відгук може мати вигляд:
{"access_token":"<ACCESS_TOKEN>","token_type":"Bearer","scope":"read_prefs write_api","created_at":1646669786}
- Після цього застосунок є авторизованим. Він може використовувати токен для доступу до OSM API в межах наданих йому дозволів допоки він не буде відкликаний чи не закінчиться його дія.
Примітки
- https://api.openstreetmap.org/api/0.6/user/details – інформація в форматі xml про користувача (вимагає наявності дозволу "отримування налаштувань")