Notiondesk OAuth позволяет другим клиентам Notiondesk подключать ваше приложение к своему рабочему пространству без обмена ключом API. Клиент входит в Notiondesk, просматривает запросы вашего приложения и подтверждает их. Ваше приложение получает токен доступа к REST API Notiondesk, и клиент может отозвать его в любое время. В этой статье рассматривается регистрация вашего приложения, запуск процесса авторизации OAuth 2.0 с использованием PKCE, обновление токенов и обработка ошибок.
Когда следует использовать OAuth вместо ключа API?
| токен доступа OAuth | Ключ API рабочей области | |
|---|---|---|
| Используйте его для | Приложение, к которому подключаются другие клиенты Notiondesk: SaaS-продукт, интеграция с маркетплейсом, инструмент для создания отчетов. | Автоматизация, которую вы запускаете для своего рабочего пространства: скрипт, запланированное задание, этап CI. |
| Кто это создает? | Клиент, одобрив ваше приложение, получает от вас подтверждение. | Вы находитесь в разделе Настройки > Разработчики > Ключи API. |
| Продолжительность жизни | Токен доступа: 1 час. Токен обновления: 30 дней, обновляется при каждом обновлении. | До истечения срока действия, ротации или аннулирования |
| Отменено из | Настройки > Разработчики > Подключенные приложения | Настройки > Разработчики > Ключи API |
Каждый маршрут API Notiondesk принимает оба типа учетных данных и отвечает на них одинаково: с одинаковыми областями действия, ответами и ошибками.
Что должно знать ваше приложение
| Элемент | Ценить |
|---|---|
| Метаданные сервера авторизации | https://api.notiondesk.so/.well-known/oauth-authorization-server |
| Конечная точка авторизации | https://api.notiondesk.so/oauth/authorize |
| Конечная точка токена | https://api.notiondesk.so/oauth/token |
| конечная точка регистрации клиента | https://api.notiondesk.so/oauth/register |
| Ресурс | https://api.notiondesk.so |
| Области применения | read, write, sync, admin |
| Виды грантов | authorization_code с PKCE и refresh_token |
| метод PKCE | S256 только |
Вместо того чтобы прописывать конечные точки в коде сервера авторизации, следует считывать их непосредственно из документа метаданных .
Шаг 1: Зарегистрируйте свое приложение
Зарегистрируйтесь один раз с помощью динамической регистрации клиентов :
Ответ 201 Created содержит ваш client_id и, поскольку вы запросили client_secret_post, client_secret. Секрет отображается один раз: сохраните его вместе с другими секретами вашего сервера.
Благодаря "token_endpoint_auth_method": "none" ваше приложение становится публичным клиентом без секретных данных, а PKCE защищает обмен кодом.
Вместо регистрации вы можете использовать HTTPS-URL документа метаданных клиента в качестве параметра client_id. Notiondesk получает документ, когда клиент авторизует ваше приложение, и кэширует его на срок до пяти минут.
Правила перенаправления URI
curl -X POST "https://api.notiondesk.so/oauth/register" \
-H "Content-Type: application/json" \
-d '{"client_name": "Acme Reports", "redirect_uris": ["https://acme.example/oauth/callback"], "token_endpoint_auth_method": "client_secret_post"}'- Используйте
httpsилиhttpна хосте обратной связи:127.0.0.1,localhostили[::1].
- Перенаправление через локальную точку (loopback) должно совпадать с любым портом. Любое другое перенаправление должно совпадать в точности.
- Подстановочные символы, фрагменты, учетные данные перед хостом (
user@), обратные косые черты, символы, не относящиеся к ASCII, и хосты, закодированные в процентах, отклоняются.
- Хост, который клиент видит на экране согласия, берется из ваших URI перенаправления или вашего URL-адреса
client_id. Регистрируйте только те хосты, которые принадлежат вам.
Шаг 2: Отправьте клиента по адресу Notiondesk
Создайте случайное значение code_verifier, затем вычислите code_challenge как хеш SHA-256 верификатора, закодированный в base64url ( PKCE ). Перенаправьте браузер клиента на:
https://api.notiondesk.so/oauth/authorize
?response_type=code
&client_id=YOUR_CLIENT_ID
&redirect_uri=https%3A%2F%2Facme.example%2Foauth%2Fcallback
&scope=read%20write
&state=RANDOM_STATE
&code_challenge=YOUR_CODE_CHALLENGE
&code_challenge_method=S256
&resource=https%3A%2F%2Fapi.notiondesk.soresourceявляется обязательным и должно точно соответствоватьhttps://api.notiondesk.so: строчные буквы, без завершающей косой черты, без пути. Отсутствие или другое значение соответствуетinvalid_request.
scope— это список, разделённый пробелами. Запрашивайте только те области видимости, которые использует ваше приложение.
stateзащищает от подделки межсайтовых запросов. Проверьте это, когда клиент вернется.
Токен, выданный для REST API Notiondesk, работает только с REST API. Токен, выданный для Workspace MCP, отклоняется REST API, и наоборот.
Шаг 3: Клиент одобряет ваше приложение
Notiondesk отображает экран согласия. Клиент входит в систему и видит название и хост вашего приложения, свою рабочую область и области действия запроса, которые разрешены его ролью. Он одобряет или отклоняет весь запрос.
Доступные вашему приложению области действия зависят от роли клиента в рабочей области:
| Роль клиента | Области действия, которые может получать ваше приложение |
|---|---|
| Менеджер просмотра или выставления счетов | read |
| Редактор | read, write, sync |
| Администратор или владелец рабочего пространства | read, write, sync, admin |
admin позволяет вашему приложению изменять фирменный стиль справочного центра, настраивать интеграции, скрипты которых загружаются в общедоступный справочный центр, и удалять перенаправления. Запрашивайте эту опцию только в том случае, если ваше приложение использует эти маршруты.
Клиент не может одобрить запрос в следующих случаях:
- Их роль не позволяет реализовать ни один из запрошенных вами вариантов;
- В их рабочем пространстве отсутствует доступ к API. На экране согласия отображается сообщение «Тарифный план рабочего пространства не включает доступ к API». Для доступа к API требуется тарифный план «Предприятие».
После подтверждения браузер возвращается к вашему redirect_uri с code, вашим state и iss, идентификатором сервера авторизации Notiondesk. Если клиент отклоняет запрос, перенаправление вместо этого передает error=access_denied.
Шаг 4: Обменяйте код на токены.
Код действителен в течение 60 секунд и срабатывает один раз:
Для общедоступного клиента следует исключить client_secret. Ответ:
scope отображает предоставленные клиентом права доступа, которых может быть меньше, чем вы запрашивали. Сохраните оба токена на своем сервере.
Шаг 5: Вызовите API Notiondesk
Отправьте токен доступа в виде токена носителя, точно так же, как и ключ API:
Область действия токена ограничена текущей ролью утверждающего клиента: клиент, изменивший роль на «Просмотрщик», покидает ваше приложение только с ролью read, а маршрут, которому требуется отсутствующая область действия, отвечает ошибкой 403 insufficient_scope.
Ограничения скорости запросов и значения Idempotency-Key относятся к гранту. Каждое одобрение представляет собой новый грант со своими собственными бюджетами и ключами, а обновление токена сохраняет и то, и другое.
Шаг 6: Обновите токен доступа.
Срок действия токена доступа составляет один час. До истечения срока его действия обменяйте токен обновления на новую пару:
Каждое обновление возвращает новый токен обновления, действительный в течение 30 дней, и аннулирует отправленный вами токен. Сохраните новый токен обновления перед использованием нового токена доступа.
curl -X POST "https://api.notiondesk.so/oauth/token" \
-d grant_type=authorization_code \
-d client_id=YOUR_CLIENT_ID \
-d client_secret=YOUR_CLIENT_SECRET \
-d code=THE_CODE \
-d code_verifier=YOUR_CODE_VERIFIER \
-d redirect_uri=https://acme.example/oauth/callback{
"access_token": "eyJ...",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "8f3c...",
"scope": "read write"
}curl "https://api.notiondesk.so/sites" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "nd-version: 2026-10-16"curl -X POST "https://api.notiondesk.so/oauth/token" \
-d grant_type=refresh_token \
-d client_id=YOUR_CLIENT_ID \
-d client_secret=YOUR_CLIENT_SECRET \
-d refresh_token=THE_REFRESH_TOKENКак клиенты отзывают ваше приложение
Владельцы и администраторы рабочих пространств видят все приложения, имеющие доступ к их рабочему пространству, в разделе «Настройки» > «Разработчики» > «Подключенные приложения» . Приложения, использующие REST API, отображаются в столбце «Доступ» , где указывается само приложение, авторизованный пользователь, его области действия и последняя активность. Функция «Отзыв» немедленно прекращает предоставление доступа: токен доступа и токен обновления перестают работать при следующем запросе.
Грант также прекращает свое действие сам по себе:
- после 30 дней без обновления;
- когда его токен обновления используется повторно.
Если у утверждающего клиента отсутствует необходимая для маршрута роль, или план рабочего пространства не имеет доступа к API, запросы отклоняются. Они снова запускаются, если роль или план возвращаются до окончания срока действия разрешения.
Устранение неполадок Notiondesk OAuth
Конечные точки авторизации и токена обрабатывают стандартные ошибки OAuth, а не ошибки API Notiondesk:
{"error": "invalid_grant", "error_description": "Invalid authorization code."}error | Статус | Когда |
|---|---|---|
invalid_request | 400 | Отсутствует или недействителен параметр: неизвестный resource, отсутствует запрос PKCE, незарегистрированный redirect_uri, неизвестный клиент на конечной точке авторизации или неподдерживаемый grant_type |
invalid_client | 401 | Секретный ключ клиента отсутствует или указан неверно. |
invalid_grant | 400 | Код или токен обновления неизвестен, просрочен, уже использован или отозван, значение code_verifier или redirect_uri не совпадает, или конечная точка токена не знает клиента. |
server_error | 500 | Notiondesk завершилась с ошибкой; повторите попытку позже. |
Конечная точка авторизации сама отображает эти ошибки и никогда не перенаправляет недействительный запрос на ваш redirect_uri. Отказанное согласие попадает в ваше приложение только в виде перенаправления error=access_denied.
При обращении к самому API выводится сообщение об ошибке API Notiondesk . Если токен доступа просрочен или отозван, выводится сообщение 401 authentication_error с текстом "Недействительный или отсутствующий ключ API", то же самое сообщение получает и неработающий ключ API.
Часто задаваемые вопросы
Можно ли вызвать API Notiondesk из одностраничного приложения с использованием OAuth?
Нет. Клиенты, работающие через браузер, не поддерживаются. Запускайте процесс OAuth и все вызовы API на своем сервере и не используйте токены в браузере.
Как долго действует токен доступа Notiondesk?
Один час. Обновите его с помощью токена обновления, который действует 30 дней и заменяется при каждом обновлении. Предоставление прав, не обновляемое в течение 30 дней, прекращается.
Может ли мое приложение OAuth использовать Workspace MCP?
Нет. Токен, выданный для REST API с resource=https://api.notiondesk.so, отклоняется Workspace MCP. Workspace MCP выдает собственные токены клиентам AI.
Почему моему приложению было предоставлено меньше областей действия, чем запрашивалось?
Роль клиента в рабочей области ограничивает области действия. Редактор может предоставить права доступа read, write и sync, но не admin. В поле scope ответа токена указано, какие права были предоставлены.