OAuth 2.0 для додатків
OAuth 2.0 дає застосунку змогу отримувати доступ до Planfix від імені користувача, не запитуючи й не зберігаючи його пароль.
Planfix використовує потік Authorization Code з обов’язковим PKCE S256. OAuth можна використовувати для підключення до REST API або сервера Planfix MCP.
Якщо ви хочете підключити готовий AI-клієнт, почніть із MCP. Якщо ви керуєте доступом у своєму акаунті, див. Додатки OAuth і MCP в акаунті. Партнерам і розробникам інтеграцій для кількох акаунтів слід переглянути OAuth-додатки для партнерів.
Варіанти реєстрації застосунку
| Варіант | Коли використовувати | Де працює |
|---|---|---|
| Застосунок, що належить акаунту | Інтеграція призначена для одного акаунту, а клієнту потрібен заздалегідь визначений client_id.
|
Лише в акаунті, якому він належить. |
| Застосунок, що належить партнеру | Той самий застосунок має підключатися до кількох акаунтів клієнтів. | В акаунтах, де це дозволено політикою безпеки або адміністратором. |
| Автоматична реєстрація MCP-клієнта | MCP-клієнт підтримує Client ID Metadata Document (CIMD) або Dynamic Client Registration (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лише для локальних вузлів, наприкладlocalhostабо127.0.0.1.
Для локального URI порт може бути динамічним, але схема, вузол, шлях і запит мають збігатися. Фрагменти 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
|
Токен не містить рівня доступу, потрібного для виконання операції. |