OAuth 2.0 для додатків
OAuth 2.0 дає змогу застосунку отримувати доступ до Planfix від імені користувача, не запитуючи та не зберігаючи пароль користувача.
Planfix використовує потік Authorization Code з обов’язковим PKCE S256. OAuth можна використовувати для підключення до REST API або до сервера MCP Planfix.
Якщо ви хочете підключити готовий AI-клієнт, почніть із MCP. Якщо ви керуєте доступом у своєму акаунті, див. Додатки OAuth і MCP в акаунті. Партнерам і розробникам інтеграцій для кількох акаунтів слід переглянути OAuth-додатки для партнерів.
Варіанти реєстрації застосунку
| Варіант | Коли використовувати | Де працює |
|---|---|---|
| Застосунок, що належить акаунту | Інтеграція призначена для одного акаунта, і клієнту потрібен заздалегідь визначений client_id.
|
Лише в акаунті, якому він належить. |
| Застосунок, що належить партнеру | Один і той самий застосунок має підключатися до кількох акаунтів клієнтів. | В акаунтах, у яких це дозволено політикою безпеки або адміністратором. |
| Автоматична реєстрація клієнта MCP | Клієнт MCP підтримує документ метаданих Client ID (CIMD) або динамічну реєстрацію клієнта (DCR). | Сама реєстрація не надає доступу до акаунта. Застосунок усе одно має бути дозволений у вибраному акаунті. |
CIMD і DCR доступні лише для підключень MCP. Для REST API використовуйте застосунок, що належить акаунту або партнеру.
Кінцеві точки OAuth
Для нових інтеграцій слід використовувати глобальні кінцеві точки. Назва акаунта не входить до цих URL-адрес: користувач вибирає акаунт під час авторизації.
| Призначення | Адреса |
|---|---|
| Емітент | https://auth.planfix.com
|
| Авторизація | https://auth.planfix.com/oauth/authorize
|
| Токен | https://auth.planfix.com/oauth/token
|
| Інформація про користувача | https://auth.planfix.com/oauth/userinfo
|
| Відкликання токена | https://auth.planfix.com/oauth/revoke
|
| Динамічна реєстрація клієнта MCP | https://auth.planfix.com/oauth/register
|
Метадані сервера авторизації доступні за стандартними кінцевими точками:
https://auth.planfix.com/.well-known/oauth-authorization-server https://auth.planfix.com/.well-known/openid-configuration
URI перенаправлення
URI перенаправлення потрібно зареєструвати в налаштуваннях застосунку. Значення, надіслане в запиті авторизації, має збігатися із зареєстрованим URI.
Дозволено використовувати:
- URL-адреси з протоколом
https; - URL-адреси з протоколом
httpлише для хостів loopback, наприкладlocalhostабо127.0.0.1.
Для URI loopback порт може бути динамічним, але схема, хост, шлях і запит мають збігатися. Фрагменти URL-адрес і дані користувача в URL-адресі не допускаються.
Рівні доступу
Застосунок отримує лише ті рівні доступу, або scopes, які були дозволені заздалегідь. Повний список див. у розділі Рівні доступу REST API.
Запитуваний набір має бути підмножиною областей доступу, зареєстрованих для застосунку. Області доступу застосунку не розширюють дозволи користувача в Planfix: застосунок може отримувати доступ лише до даних, доступних співробітнику, який його підключив.
Керовані застосунки також отримують службові області доступу userinfo, openid і email.
Авторизація користувача
Згенеруйте code_verifier і його представлення SHA-256 — code_challenge, а потім відкрийте кінцеву точку авторизації в браузері.
Приклад для REST API:
GET https://auth.planfix.com/oauth/authorize
?client_id=CLIENT_ID
&redirect_uri=https%3A%2F%2Fexample.com%2Foauth%2Fcallback
&response_type=code
&scope=openid%20email%20task_readonly
&state=RANDOM_STATE
&code_challenge=CODE_CHALLENGE
&code_challenge_method=S256
Для MCP додайте параметр resource із точною URL-адресою сервера MCP:
resource=https%3A%2F%2Fmcp.planfix.com%2Fmcp
| Параметр | Опис |
|---|---|
client_id
|
Ідентифікатор зареєстрованого застосунку. Для CIMD це URL-адреса документа метаданих клієнта. |
redirect_uri
|
Один із дозволених URI перенаправлення. |
response_type
|
Має бути code.
|
scope
|
Необхідні дозволи, розділені пробілами. Цей параметр обов’язковий для REST API. Клієнт MCP може його не вказувати — у такому разі використовуються області доступу, дозволені для застосунку. |
state
|
Випадкове значення, яке захищає запит від підміни. Після перенаправлення застосунок має перевірити його. |
code_challenge
|
Хеш SHA-256 від code_verifier у форматі Base64url без заповнення.
|
code_challenge_method
|
Підтримується лише S256.
|
resource
|
Для MCP — точна URL-адреса https://mcp.planfix.com/mcp. Не надсилайте цей параметр для REST API.
|
Користувач вибирає акаунт, входить у систему та переглядає запитувані дозволи. Застосунок, що належить акаунту, одразу відкриває акаунт-власник. Якщо політика безпеки вимагає схвалення адміністратора, Planfix відображає відповідний крок. Адміністратор може схвалити застосунок і підключити його однією дією.
Після успішної авторизації Planfix перенаправляє браузер на redirect_uri:
https://example.com/oauth/callback?code=AUTHORIZATION_CODE&state=RANDOM_STATE&iss=https%3A%2F%2Fauth.planfix.com
Код авторизації можна використати лише один раз, і він дійсний протягом 10 хвилин.
Отримання токенів
Надішліть POST-запит на /oauth/token, використовуючи application/x-www-form-urlencoded:
grant_type=authorization_code &client_id=CLIENT_ID &code=AUTHORIZATION_CODE &redirect_uri=https%3A%2F%2Fexample.com%2Foauth%2Fcallback &code_verifier=CODE_VERIFIER
Для MCP повторно передайте параметр resource із тим самим значенням, що й у запиті авторизації.
Публічний клієнт надсилає запит без секрету. Конфіденційний клієнт також автентифікується за допомогою client_secret_basic або параметрів client_id і client_secret у тілі запиту.
Приклад відповіді:
{
"access_token": "ACCESS_TOKEN",
"token_type": "bearer",
"expires_in": 86400,
"refresh_token": "REFRESH_TOKEN",
"scope": "openid email task_readonly"
}
Для REST API відповідь також містить account_name, account_domain і account_url. Збережіть ці значення та використовуйте URL-адресу вибраного акаунта для запитів REST API.
Токен доступу дійсний протягом 24 годин. Він прив’язаний до користувача, акаунта, застосунку, областей доступу та ресурсу. Токен, виданий для MCP, не можна безпосередньо використовувати з REST API, так само як токен REST API не можна використовувати з MCP.
Використання токена з REST API
Передайте токен у заголовку Authorization:
GET https://account.planfix.com/rest/task/123 Authorization: Bearer ACCESS_TOKEN
Використовуйте URL-адресу акаунта, отриману під час обміну коду авторизації на токени. Доступні лише методи, на які поширюються надані області доступу. На токени OAuth поширюються обмеження тарифного плану акаунта та стандартні обмеження REST API.
Інформація про користувача
Для запиту userinfo потрібна область доступу openid:
GET https://auth.planfix.com/oauth/userinfo Authorization: Bearer ACCESS_TOKEN
Приклад відповіді, якщо наявна область доступу email:
{
"sub": "123:user:456",
"email": "user@example.com",
"email_verified": true
}
Глобальна авторизація OAuth доступна співробітникам акаунта. Planfix не видає id_token; натомість запитуйте дані користувача через userinfo.
Оновлення токенів
POST https://auth.planfix.com/oauth/token Content-Type: application/x-www-form-urlencoded grant_type=refresh_token &client_id=CLIENT_ID &refresh_token=REFRESH_TOKEN
Для MCP знову передайте той самий параметр resource. Конфіденційний клієнт має пройти автентифікацію за допомогою свого секрету.
Planfix повертає новий токен доступу та новий токен оновлення. Попередній токен оновлення одразу стає недійсним, тому застосунок має атомарно замінити збережене значення.
Відкликання токена
Клієнт може відкликати токен оновлення через /oauth/revoke:
POST https://auth.planfix.com/oauth/revoke Content-Type: application/x-www-form-urlencoded token=REFRESH_TOKEN &client_id=CLIENT_ID
Користувач також може видалити підключення в розділі Керування сеансами картки користувача. Адміністратор може відкликати схвалення стороннього застосунку для всього акаунта. Див. Додатки OAuth і MCP в акаунті.
Сумісність із наявними інтеграціями
Кінцеві точки для окремого акаунта, такі як https://account.planfix.com/api/v2/oauth/authorize, /token і /userinfo, продовжують працювати для наявних інтеграцій, прив’язаних до конкретного акаунта.
Для нових інтеграцій використовуйте глобальні кінцеві точки. Вони підтримують пошук стандартних метаданих, вибір акаунта та MCP. Не поєднуйте глобальні кінцеві точки й кінцеві точки для окремого акаунта в межах одного сеансу OAuth.
Рекомендації з безпеки
- Завжди використовуйте PKCE S256 і перевіряйте
state. - Для мобільних, настільних і браузерних застосунків використовуйте публічний клієнт без секрету.
- Використовуйте конфіденційний клієнт лише тоді, коли секрет можна надійно зберігати на сервері.
- Запитуйте мінімально необхідний набір областей доступу.
- Не записуйте в журнали токени доступу й оновлення, коди авторизації,
code_verifierабо секрети клієнта. - Зберігайте токени оновлення та секрети клієнта в зашифрованому сховищі.
- Перевіряйте
issу відповіді та приймайте лише очікуваний емітент Planfix.
Можливі помилки
| Помилка | Причина |
|---|---|
invalid_client
|
Клієнта не знайдено або його вимкнено, секрет клієнта неправильний або застосунок недоступний у вибраному акаунті. |
invalid_grant
|
Код авторизації або токен оновлення недійсний, прострочений, уже використаний або не відповідає клієнту, URI перенаправлення, даним PKCE чи ресурсу. |
invalid_scope
|
Запит містить область доступу, не дозволену для застосунку. |
invalid_target
|
Параметр resource не підтримується або його значення змінилося між запитами.
|
access_denied
|
Користувач відхилив підключення або політика акаунта не дозволяє використовувати застосунок. |
HTTP 401, invalid_token
|
Токен доступу невідомий, прострочений або відкликаний. |
HTTP 403, insufficient_scope
|
Токен не містить області доступу, необхідної для виконання операції. |