Konfiguracja uwierzytelniania API PSB z OAuth2: client credentials, tokeny i dostęp multi-tenant krok po kroku.
API PSB eConnect wykorzystuje OAuth 2.0 do uwierzytelniania. Każde żądanie API zawiera Bearer token, który uzyskuje się z Identity Server eConnect. Token ten jest ważny przez godzinę i zawiera wszystkie informacje potrzebne PSB do ustalenia, kim Państwo są, w imieniu jakiej organizacji pracują i co mogą robić.
W tym artykule omówiony jest cały proces uwierzytelniania: od zrozumienia modelu uwierzytelniania po żądanie i używanie tokenów.
PSB pracuje z czterema warstwami identyfikacji. Każda warstwa odpowiada na inne pytanie, a razem określają dostęp do API.
Warstwa 1: Aplikacja (clientId + clientSecret)
Identyfikuje oprogramowanie łączące się z PSB. Z reguły partner oprogramowania używa jednego zestawu clientId/clientSecret dla wszystkich swoich klientów końcowych. Upraszcza to wdrożenie: klienci końcowi muszą podać mniej danych technicznych, a ryzyko błędów konfiguracyjnych jest mniejsze. Wszystkie clientId mają ten sam scope (ap), a więc te same uprawnienia funkcjonalne.
Warstwa 2: Klient końcowy (username + password)
Identyfikuje, w imieniu jakiej organizacji wykonywana jest praca. Dla każdego klienta końcowego eConnect tworzy konto użytkownika PSB powiązane z jednym lub kilkoma partyId (numer izby handlowej, numer VAT, OIN, belgijski numer przedsiębiorstwa). W przepływie Resource Owner Password Credentials podaje się username i password, które określają, do jakich party jest dostęp. W przepływie Client Credentials nie jest to konieczne, ponieważ uprawnienia są bezpośrednio powiązane z aplikacją. Nazwa użytkownika i hasło są zazwyczaj przekazywane bezpośrednio klientowi końcowemu; klient końcowy sam udostępnia je dostawcy oprogramowania. Podczas tworzenia konta użytkownika klienta końcowego we własnym tenancie PSB (na przykład dla integracji 4PS Business Central) hasło nie może zawierać znaków specjalnych, z wyjątkiem wykrzyknika (!).
Warstwa 3: Środowisko (tenantId) Zapewnia administracyjną separację między środowiskami. Każdy klient końcowy otrzymuje zwykle własny tenant, co gwarantuje pełną separację wiadomości, konfiguracji i logowania. Niektórzy partnerzy oprogramowania umieszczają wielu klientów końcowych w jednym tenancie w celu centralnego zarządzania; inni wybierają osobny tenant dla każdego klienta w celu maksymalnej izolacji. Tenanty nie mogą być łączone, ale konta użytkowników mogą być modyfikowane lub rozszerzane.
Warstwa 4: Logowanie (subscription key, legacy)
Header Subscription-Key był pierwotnie przeznaczony do identyfikacji w plikach logów API. Dla API PSB ten header nie jest już wymagany. Jeśli zostanie wysłany, wartość musi być prawidłowa. eConnect nadal czasami wydaje subscription key, ponieważ umożliwiają one śledzenie każdego żądania w logach do konkretnego partnera oprogramowania. Uwaga: dla platformy eConnect (platform.econnect.eu) subscription key jest nadal wymagany.
Token żąda się, wysyłając żądanie POST do endpointu /connect/token Identity Server.
https://accp-identity.econnect.euhttps://identity.econnect.euTo zalecany przepływ dla integracji serwer-serwer. Wysyła się tylko swój clientId i clientSecret.
POST /connect/token HTTP/1.1
Host: identity.econnect.eu
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials
&client_id=panstwa-client-id
&client_secret=panstwa-client-secret
&scope=ap
W tym przepływie podaje się również nazwę użytkownika i hasło. Jest to przydatne, gdy uprawnienia są powiązane z konkretnym użytkownikiem końcowym.
POST /connect/token HTTP/1.1
Host: identity.econnect.eu
Content-Type: application/x-www-form-urlencoded
grant_type=password
&client_id=panstwa-client-id
&client_secret=panstwa-client-secret
&username=panstwa-nazwa-uzytkownika
&password=panstwa-haslo
&scope=ap
W przypadku pomyślnego żądania otrzymuje się obiekt JSON zawierający access token:
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"expires_in": 3600,
"token_type": "Bearer",
"scope": "ap"
}
Pole expires_in wskazuje, ile sekund token jest ważny. Domyślnie jest to 3600 sekund (1 godzina).
Należy dołączyć Bearer token w headerze Authorization każdego żądania API do PSB:
GET /api/v1/me HTTP/1.1
Host: psb.econnect.eu
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
PSB waliduje token przy każdym żądaniu. Jeśli token jest nieprawidłowy lub wygasł, otrzymuje się odpowiedź 401 Unauthorized.
Bearer token jest ważny przez 3600 sekund. Po wygaśnięciu należy zażądać nowego tokenu przez ten sam endpoint /connect/token. Nie ma oddzielnego przepływu odświeżania: po prostu powtarza się żądanie tokenu.
W praktyce najlepiej jest zażądać nowego tokenu krótko przed wygaśnięciem bieżącego, na przykład po 3500 sekundach. Zapobiega to niepowodzeniu wywołania API z powodu wygasłego tokenu, gdy żądanie jest w trakcie transmisji.
1. Token zażądany → ważny do t+3600s
2. Po ~3500s: nowy token → stary token jeszcze ~100s ważny
3. Przełączenie na nowy token
Należy przechowywać token w swojej aplikacji i używać go wielokrotnie. Nie należy żądać nowego tokenu przy każdym wywołaniu API, ponieważ powoduje to niepotrzebne obciążenie Identity Server.
Domyślnie partner oprogramowania używa jednego zestawu clientId/clientSecret dla wszystkich klientów końcowych. W niektórych sytuacjach warto używać wielu zestawów:
clientId dla środowiska akceptacyjnego (accp-identity.econnect.eu) i dla produkcji (identity.econnect.eu). Zapobiega to przypadkowemu użyciu danych testowych w produkcji.clientSecret może stanowić zagrożenie bezpieczeństwa. Z osobnym clientId na klienta ogranicza się szkody w przypadku wycieku danych uwierzytelniających.clientId na aplikację z tylko niezbędnymi uprawnieniami.Unieważnienie clientSecret dotyczy tylko powiązanego clientId. Inni klienci lub integracje nie są dotknięci.
AuthorizationclientId lub clientSecret jest nieprawidłowyap w tokeniescope=ap do żądania tokenuclient_credentials lub password jako grant_typeJeśli otrzyma się 401 przy wywołaniu API do PSB, należy najpierw sprawdzić, czy token jest jeszcze ważny. W większości przypadków wygasł i wystarczy zażądać nowego tokenu.
Poniższy diagram pokazuje, jak aplikacja żąda tokenu z Identity Server, a następnie używa tego tokenu do wywoływania API PSB.
Pełna dokumentacja API, obejmująca wszystkie endpointy oraz formaty żądań i odpowiedzi, jest dostępna w interaktywnej dokumentacji Swagger.
Zobacz dokumentację API PSB