Notiondesk OAuth pozwala innym klientom Notiondesk połączyć Twoją aplikację ze swoim obszarem roboczym bez udostępniania klucza API. Klient loguje się do Notiondesk, sprawdza, o co prosi Twoja aplikacja i zatwierdza żądanie. Twoja aplikacja otrzymuje token dostępu do interfejsu REST API Notiondesk, który klient może w dowolnym momencie cofnąć. W tym artykule opisano rejestrację aplikacji, uruchomienie przepływu kodu autoryzacji OAuth 2.0 z PKCE, odświeżanie tokenów i obsługę błędów.
Kiedy używać protokołu OAuth zamiast klucza API
| Token dostępu OAuth | Klucz API obszaru roboczego | |
|---|---|---|
| Użyj tego do | Aplikacja, z którą łączą się inni klienci Notiondesk: produkt SaaS, integracja z rynkiem, narzędzie do raportowania | Automatyzacja, którą uruchamiasz we własnym obszarze roboczym: skrypt, zadanie zaplanowane, krok CI |
| Kto to tworzy? | Klient, akceptując Twoją aplikację | Ty, w Ustawieniach > Deweloperzy > Klucze API |
| Życie | Token dostępu: 1 godzina. Token odświeżania: 30 dni, odnawiany przy każdym odświeżeniu. | Do czasu wygaśnięcia, obrócenia lub odwołania |
| Odwołano z | Ustawienia > Deweloperzy > Połączone aplikacje | Ustawienia > Deweloperzy > Klucze API |
Każda trasa API Notiondesk akceptuje oba poświadczenia i odpowiada na nie w ten sam sposób: z tymi samymi zakresami, odpowiedziami i błędami.
Co Twoja aplikacja musi wiedzieć
| Przedmiot | Wartość |
|---|---|
| Metadane serwera autoryzacji | https://api.notiondesk.so/.well-known/oauth-authorization-server |
| Punkt końcowy autoryzacji | https://api.notiondesk.so/oauth/authorize |
| Punkt końcowy tokena | https://api.notiondesk.so/oauth/token |
| Punkt końcowy rejestracji klienta | https://api.notiondesk.so/oauth/register |
| Ratunek | https://api.notiondesk.so |
| Zakresy | read, write, sync, admin |
| Rodzaje dotacji | authorization_code z PKCE i refresh_token |
| Metoda PKCE | Tylko S256 |
Odczytaj punkty końcowe z dokumentu metadanych serwera autoryzacji, zamiast kodować je na stałe.
Krok 1: Zarejestruj swoją aplikację
Zarejestruj się raz za pomocą dynamicznej rejestracji klienta :
Odpowiedź 201 Created zawiera Twoje client_id oraz, ponieważ poprosiłeś o client_secret_post, client_secret. Sekret jest wyświetlany raz: przechowuj go razem z innymi sekretami serwera.
Dzięki "token_endpoint_auth_method": "none" Twoja aplikacja jest publicznym klientem bez żadnych tajemnic, a PKCE chroni wymianę kodu.
Zamiast rejestrować się, możesz użyć adresu URL HTTPS dokumentu metadanych klienta jako client_id. Notiondesk pobiera dokument, gdy klient autoryzuje Twoją aplikację i zapisuje go w pamięci podręcznej na okres do pięciu minut.
Reguły przekierowania 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"}'- Użyj
httpslubhttpna hoście pętli zwrotnej:127.0.0.1,localhostlub[::1].
- Przekierowanie pętli zwrotnej pasuje do dowolnego portu. Każde inne przekierowanie musi pasować dokładnie.
- Symbole wieloznaczne, fragmenty, dane uwierzytelniające przed hostem (
user@), ukośniki odwrotne, znaki spoza zestawu ASCII oraz hosty zakodowane procentowo są odrzucane.
- Host, którego klient widzi na ekranie zgody, pochodzi z Twoich adresów URI przekierowania lub z Twojego adresu URL
client_id. Rejestruj tylko hosty, których jesteś właścicielem.
Krok 2: Przekieruj klienta do Notiondesk
Utwórz losowy code_verifier, a następnie wyprowadź code_challenge jako skrót SHA-256 weryfikatora, zakodowany w base64url ( PKCE ). Przekieruj przeglądarkę klienta do:
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.soresourcejest wymagane i musi wynosić dokładniehttps://api.notiondesk.so: małe litery, bez ukośnika na końcu, bez ścieżki. Brakująca lub inna wartość odpowiadainvalid_request.
scopeto lista rozdzielona spacjami. Pytaj tylko o zakresy używane przez Twoją aplikację.
statechroni przed fałszowaniem żądań między witrynami. Sprawdź to, gdy klient wróci.
Token wydany dla interfejsu API REST Notiondesk działa tylko z interfejsem API REST. Token wydany dla Workspace MCP jest odrzucany przez interfejs API REST i odwrotnie.
Krok 3: Klient zatwierdza Twoją aplikację
Notiondesk wyświetla ekran zgody. Klient loguje się i widzi nazwę i hosta Twojej aplikacji, swoją przestrzeń roboczą oraz zakresy z Twojego żądania, na które zezwala jego rola. Zatwierdza lub odrzuca całe żądanie.
Zakresy, jakie może otrzymać Twoja aplikacja, zależą od roli klienta w obszarze roboczym:
| Rola klienta | Zakresy, które może odbierać Twoja aplikacja |
|---|---|
| Przeglądarka lub menedżer rozliczeń | read |
| Redaktor | read, write, sync |
| Administrator lub właściciel obszaru roboczego | read, write, sync, admin |
admin pozwala Twojej aplikacji zmienić branding Centrum pomocy, skonfigurować integracje, których skrypty ładują się w publicznym Centrum pomocy, oraz usunąć przekierowania. Poproś o to tylko wtedy, gdy Twoja aplikacja korzysta z tych tras.
Klient nie może zaakceptować wniosku, gdy:
- ich rola nie pozwala na żaden z zakresów, o które prosiłeś;
- Ich przestrzeń robocza nie ma dostępu do API. Na ekranie zgody pojawia się komunikat: „Plan przestrzeni roboczej nie obejmuje dostępu do API”. Dostęp do API wymaga planu Enterprise.
Po zatwierdzeniu przeglądarka powraca do redirect_uri z code, state i iss, czyli identyfikatorem serwera autoryzacji Notiondesk. Jeśli klient odmówi, przekierowanie przenosi error=access_denied.
Krok 4: Wymiana kodu na tokeny
Kod jest ważny przez 60 sekund i działa jednorazowo:
Pomiń client_secret dla klienta publicznego. Odpowiedź:
scope wyświetla zakresy przyznane przez klienta, które mogą być mniejsze niż te, o które prosiłeś. Przechowuj oba tokeny na swoim serwerze.
Krok 5: Wywołanie interfejsu API Notiondesk
Wyślij token dostępu jako token nośnika, dokładnie tak jak klucz API:
Zakresy tokena są ograniczone do bieżącej roli zatwierdzającego klienta: klient, którego rola została zmieniona na Widz, opuszcza aplikację tylko z read, a trasa wymagająca brakującego zakresu odpowiada 403 insufficient_scope.
Budżety limitów stawek i wartości Idempotency-Key należą do grantu. Każde zatwierdzenie to nowy grant z własnymi budżetami i kluczami, a odświeżenie tokena zachowuje oba te elementy.
Krok 6: Odśwież token dostępu
Token dostępu jest ważny przez godzinę. Przed jego wygaśnięciem wymień token odświeżania na nową parę:
Każde odświeżenie zwraca nowy token odświeżania ważny przez 30 dni i unieważnia ten, który wysłałeś. Zachowaj nowy token odświeżania przed użyciem nowego tokena dostępu.
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_TOKENJak klienci mogą cofnąć Twoją aplikację
Właściciele i administratorzy przestrzeni roboczej widzą wszystkie aplikacje z dostępem do ich przestrzeni roboczej w Ustawieniach > Deweloperzy > Połączone aplikacje . Aplikacje korzystające z interfejsu API REST wyświetlają interfejs API REST w kolumnie Dostęp , wraz z nazwą aplikacji, osobą, która ją autoryzowała, jej zakresami i ostatnią aktywnością. Polecenie „Revoke” natychmiast kończy przyznanie uprawnień: token dostępu i token odświeżania przestają działać przy następnym żądaniu.
Dotacja również kończy się sama:
- po 30 dniach bez odświeżania;
- gdy jego token odświeżania jest ponownie wykorzystywany.
Jeśli klient zatwierdzający nie posiada roli wymaganej przez trasę lub plan obszaru roboczego nie ma dostępu do API, żądania są odrzucane. Są one ponownie obsługiwane, jeśli rola lub plan powrócą przed zakończeniem przyznania.
Rozwiązywanie problemów Notiondesk OAuth
Punkty końcowe autoryzacji i tokena odpowiadają na standardowe błędy OAuth, a nie na błędy API Notiondesk:
{"error": "invalid_grant", "error_description": "Invalid authorization code."}error | Status | Gdy |
|---|---|---|
invalid_request | 400 | Brakuje parametru lub jest on nieprawidłowy: nieznany resource, brak wyzwania PKCE, niezarejestrowany redirect_uri, nieznany klient w punkcie końcowym autoryzacji lub nieobsługiwany grant_type |
invalid_client | 401 | Brak lub błędny sekret klienta |
invalid_grant | 400 | Kod lub token odświeżania jest nieznany, wygasł, jest już używany lub odwołany, code_verifier lub redirect_uri nie pasuje lub punkt końcowy tokena nie zna klienta |
server_error | 500 | Błąd Notiondesk; spróbuj ponownie później |
Punkt końcowy autoryzacji sam wyświetla te błędy i nigdy nie przekierowuje nieprawidłowego żądania do redirect_uri. Odmowa zgody dociera do Twojej aplikacji dopiero jako przekierowanie error=access_denied.
Wywołania samego API odpowiadają na błąd API Notiondesk . Wygasły lub unieważniony token dostępu odpowiada kodem 401 authentication_error, wyświetlając komunikat „Nieprawidłowy lub brakujący klucz API”, taki sam jak w przypadku bezużytecznego klucza API.
Często zadawane pytania
Czy mogę wywołać API Notiondesk z aplikacji jednostronicowej z OAuth?
Nie. Klienci przeglądarkowi nie są obsługiwani. Uruchom przepływ OAuth i każde wywołanie API na swoim serwerze i nie udostępniaj tokenów przeglądarce.
Jak długo ważny jest token dostępu Notiondesk?
Jedna godzina. Odśwież go za pomocą tokena odświeżania, który jest ważny 30 dni i wymieniany przy każdym odświeżeniu. Grant, który nie zostanie odświeżony przez 30 dni, wygasa.
Czy moja aplikacja OAuth może używać Workspace MCP?
Nie. Token wydany dla REST API z resource=https://api.notiondesk.so został odrzucony przez Workspace MCP. Workspace MCP wydaje własne tokeny klientom AI.
Dlaczego moja aplikacja otrzymała mniej zakresów, niż prosiła?
Zakresy są ograniczone rolą klienta w obszarze roboczym. Edytor może przyznać uprawnienia read, write i sync, ale nie admin. Pole scope odpowiedzi tokena zawiera listę przyznanych uprawnień.