Control API - użytkownicy i aplikacje uwierzytelniające
Użyj FoxIDs Control API do provisionowania użytkowników wewnętrznych i zarządzania aplikacjami uwierzytelniającymi zarejestrowanymi przez każdego użytkownika. Ten przewodnik koncentruje się na operacjach służących do synchronizacji rejestracji między deploymentami FoxIDs.
Przed wywołaniem tych operacji skonfiguruj uwierzytelnianie i uprawnienia Control API. Swagger pozostaje dokładną dokumentacją wszystkich właściwości użytkownika, filtrów, reguł walidacji i schematów response:
Baza endpointu
Przykłady używają FoxIDs Cloud:
https://control.foxids.com/api/{tenant_name}/{track_name}
Zastąp {tenant_name} nazwą tenanta, a {track_name} techniczną nazwą środowiska. Zmień host dla self-hosted deployment. Wyślij access token Control API w nagłówku Authorization: Bearer {access_token}.
Operacje na użytkownikach i aplikacjach uwierzytelniających wymagają prawa użytkownika do środowiska docelowego. Nadaj tylko potrzebną operację read, create, update lub delete poprzez hierarchię praw Control API.
Identyfikatory użytkownika
Każdy użytkownik wewnętrzny musi mieć co najmniej jeden identyfikator logowania: e-mail, telefon lub nazwę użytkownika. Adresy e-mail mogą mieć do 100 znaków, a nazwy użytkowników do 60 znaków. Adresy e-mail i nazwy użytkownika są normalizowane do małych liter, a otaczające białe znaki są usuwane ze wszystkich identyfikatorów.
Operacje pojedynczego użytkownika identyfikują go przez query parameter email, phone lub username. Response zawiera także generowany przez serwer userId. Jest on unikalny i trwały również po zmianie identyfikatora i powinien służyć do wiązania aplikacji uwierzytelniających lub innych zasobów.
Dla użytkowników Directory Connector zachowaj stabilne powiązanie directoryUserId podczas aktualizacji konta. Synchronizacja na żądanie zastępuje identyfikatory, ustawienia i claims katalogu; zmieniaj je w katalogu nadrzędnym. Rejestracje aplikacji uwierzytelniających i przypisania dostępu FoxIDs pozostają zachowane.
Operacje użytkownika
Operacje pojedynczego użytkownika są w Swaggerze pogrupowane pod tenant users.
Niestandardowe claims mogą zawierać opcjonalny valueType: String, Boolean, Number, JsonObject lub JsonArray. Wszystkie wpisy w values pozostają ciągami znaków i mają wspólny wybrany typ. Pomiń valueType dla String. API odrzuca wartości niezgodne z wybranym typem; zachowuj typ podczas odczytu i aktualizacji claims. Te same opcje dotyczą claims węzłów struktur dostępu oraz claims pierwszego administratora podczas tworzenia tenanta. Zobacz typy wartości claims, aby poznać zakresy liczb i zachowanie w JWT/SAML.
| Operacja | Endpoint | Sukces | Cel |
|---|---|---|---|
| Lista | GET /!users |
200 OK |
Lista i filtrowanie użytkowników z paginacją. |
| Pobierz | GET /!user?email={email} |
200 OK |
Pobierz użytkownika po e-mailu, telefonie lub nazwie. |
| Utwórz | POST /!user |
201 Created |
Utwórz użytkownika z opcjonalnymi danymi hasła. |
| Aktualizuj | PUT /!user |
200 OK |
Zastąp edytowalne właściwości i opcjonalnie zmień identyfikatory. |
| Usuń | DELETE /!user?email={email} |
204 No Content |
Usuń użytkownika po e-mailu, telefonie lub nazwie. |
| Utwórz lub zastąp zbiorczo | PUT /!users |
204 No Content |
Importuj nowych użytkowników lub zastąp pasujących. |
| Usuń zbiorczo | DELETE /!users |
204 No Content |
Usuń użytkowników wskazanych w request body. |
| Ustaw hasło | PUT /!usersetpassword |
200 OK |
Ustaw, importuj lub usuń hasło bez bieżącego hasła. |
| Zmień hasło | PUT /!userchangepassword |
200 OK |
Zmień hasło, podając bieżące i nowe. |
| Historia haseł | GET, PUT lub DELETE /!userpasswordhistory |
200 OK / 204 No Content |
Odczytaj, zastąp lub usuń historię. |
W razie potrzeby użyj phone={phone} lub username={username} zamiast email={email}. Dołącz każdy endpoint do bazy endpointu.
Lista i filtrowanie użytkowników
GET /!users przyjmuje filterEmail, filterPhone, filterUsername, filterUserId i filterClaimValue. Każdy filtr wyszukuje częściowe dopasowania bez rozróżniania wielkości liter. Przy wielu filtrach użytkownik jest zwracany, jeśli pasuje dowolny z nich.
Response zawiera collection data i nieprzezroczysty paginationToken. Powtórz ten sam request z otrzymaną wartością jako paginationToken, aby pobrać następną stronę. Kontynuuj, aż token nie będzie zwracany. Nie interpretuj go ani nie modyfikuj.
Response użytkownika wskazuje, czy hasło jest skonfigurowane i kiedy je zmieniono, ale nigdy nie zwraca hasła ani jego bieżącego hashu.
Tworzenie użytkownika
Create-request obsługuje stan konta, zweryfikowane identyfikatory, własne claims, politykę hasła, konfigurację przez e-mail lub SMS i ustawienia MFA użytkownika. Przykład tworzy użytkownika bez hasła i wymaga konfiguracji przez e-mail:
POST https://control.foxids.com/api/{tenant_name}/{track_name}/!user
Authorization: Bearer {access_token}
Content-Type: application/json
{
"email": "alice@example.com",
"emailVerified": true,
"setPasswordEmail": true,
"claims": [
{
"claim": "role",
"values": ["employee"]
}
]
}
Create-request może zawierać hasło jawne, obsługiwane pola hashu albo nie zawierać danych hasła. Nigdy nie wysyłaj obu formatów. Hasła jawne są sprawdzane względem polityki; importowane hashe nie. Bez danych użyj setPasswordEmail lub setPasswordSms, jeśli użytkownik ma utworzyć hasło podczas logowania.
Utworzenie istniejącego użytkownika zwraca 409 Conflict, a limit użytkowników w planie tenanta ma zastosowanie. Równoczesna operacja użytkownika może chwilowo zablokować tworzenie; ponów 423 Locked po krótkiej przerwie.
Aktualizowanie użytkownika
PUT /!user jest pełną aktualizacją, nie patchem. Pobierz bieżącego użytkownika, zachowaj niezmieniane właściwości, zastosuj zmiany i wyślij całą edytowalną reprezentację. Collection claims i flagi konta/MFA są zastępowane. Hasła i rejestracje aplikacji mają osobne operacje.
Identyfikuj użytkownika przez email, phone lub username. Aby zmienić identyfikator, zachowaj jego bieżącą wartość i ustaw updateEmail, updatePhone lub updateUsername. Pusty string usuwa identyfikator; pominięcie pola pozostawia go bez zmian. Zachowaj co najmniej jeden identyfikator logowania.
Zmiana disableAccount z false na true unieważnia refresh token grants i aktywne sesje. Ponowne włączenie pozwala na nowe logowania, ale nie przywraca sesji.
Niestandardowe oświadczenia użytkowników nie mogą używać chronionych nazw oświadczeń, takich jak sid i auth_time.
Zarządzanie hasłami
Użyj PUT /!usersetpassword do administracyjnego ustawienia hasła lub migracji. Obsługiwane są trzy tryby:
- Podaj
password, aby zastosować wybraną politykę i zaktualizować historię haseł. - Podaj
passwordHashAlgorithmipasswordHashorazpasswordHashSalt, jeśli wymaga tego algorytm, aby zaimportować obsługiwany wstępnie obliczony skrót bez walidacji polityki. - Pomiń oba formaty, aby usunąć aktualne hasło użytkownika.
Te same formaty skrótów są akceptowane podczas tworzenia użytkownika lub zbiorczego aprowizowania:
passwordHashAlgorithm |
passwordHash |
passwordHashSalt |
|---|---|---|
P2HS512:10 |
Skrót wyprowadzony przez PBKDF2-HMAC-SHA512, zakodowany jako Base64URL bez dopełnienia. | Wymagane, zakodowane jako Base64URL bez dopełnienia. |
bcrypt |
Pełny 60-znakowy ciąg bcrypt z prefiksem $2a$, $2b$ lub $2y$ i kosztem 4–16. |
Pomiń; sól jest osadzona w skrócie. |
Na przykład to administracyjne żądanie hasła importuje syntetyczny skrót bcrypt:
{
"email": "alice@example.com",
"passwordHashAlgorithm": "bcrypt",
"passwordHash": "$2b$10$..CA.uOD/eaGAOmJB.yMBu3YunYvFEoaS5IJZ/wiqfQ/EWx.HaqjC"
}
Nie łącz password z polami skrótu. Skrót lub sól bez algorytmu są odrzucane. Niepoprawne ciągi bcrypt, nieobsługiwane warianty, koszty poza obsługiwanym zakresem i oddzielne sole bcrypt są odrzucane przed zapisem. Zobacz haszowanie haseł dla parametrów i limitu hasła bcrypt wynoszącego 72 bajty.
Opcjonalne passwordLastChanged to czas Unix w sekundach. Użyj changePassword, aby wymagać wyboru nowego hasła przy następnym odpowiednim logowaniu. Import skrótu pomija kontrolę polityki haseł podczas importu; wybrana polityka nadal obowiązuje przy logowaniu. Logowanie zachowuje zaimportowany skrót i czas zmiany hasła. Ustawienie lub zmiana jawnego hasła używa domyślnego formatu PBKDF2.
Użyj PUT /!userchangepassword, gdy aktualne hasło jest znane. Operacja sprawdza je i weryfikuje nowe według polityki i historii użytkownika.
Punkt końcowy historii haseł jest przeznaczony do kontrolowanych scenariuszy migracji i odzyskiwania. Akceptuje również wpisy historii bcrypt z tymi samymi ograniczeniami formatu i kosztu oraz bez oddzielnej soli. Szczegółowa odpowiedź zawiera materiał skrótów haseł, a PUT zastępuje całą historię. Stosuj te same zabezpieczenia co dla importowanych skrótów haseł i nie zapisuj treści żądań ani odpowiedzi w logach.
Provisionowanie zbiorcze
PUT /!users przyjmuje od 1 do 1 000 użytkowników na request. Maksymalnie 100 entries może zawierać jawne hasła. Requests bez nich, w tym z obsługiwanymi wstępnie obliczonymi hashami, mogą zawierać 1 000 użytkowników.
Import zbiorczy tworzy nowych użytkowników lub zastępuje pasujących użytkowników; nie scala poszczególnych właściwości i nie może zmieniać identyfikatorów e-mail, telefonu ani nazwy użytkownika. Traktuj go jako import zastępujący. Przy zwykłych zmianach cyklu życia konta używaj operacji aktualizacji pojedynczego użytkownika, aby zachować istniejący stan i trwały identyfikator użytkownika.
DELETE /!users przyjmuje od 1 do 1 000 e-maili, telefonów lub nazw w userIdentifiers. Zobacz Prześlij wielu użytkowników, aby poznać formaty, wydajność i seed tool.
Usuwanie użytkowników i unieważnianie dostępu
Usuwanie pojedyncze lub zbiorcze unieważnia refresh token grants i aktywne sesje przed usunięciem konta. Jest trwałe. Użyj operacji delete aplikacji uwierzytelniających, aby usunąć tylko ich rejestracje.
Requests tworzenia, aktualizacji, hasła i usuwania trafiają do audit logu Control. Odczyty nie są zapisywane jako audit-events.
Blokady nieudanych logowań
Użyj operacji listy i szczegółów do sprawdzania blokad; usuń blokadę, gdy administrator zatwierdzi jej zakończenie.
Blokady użytkowników mają userIdentifier. Użyj tej wartości i typu błędu do pobrania lub zakończenia blokady. Filtr listy filterUserIdentifier porównuje identyfikatory bez rozróżniania wielkości liter.
Blokady DirectorySynchronisation mają sequenceId i pomijają userIdentifier. Użyj dokładnego sequenceId, z zachowaniem wielkości liter, oraz typu błędu do pobrania lub zakończenia blokady synchronizacji, bez parametru userIdentifier. Użyj filterSequenceId, aby znaleźć blokady tej sekwencji. Podanie filterUserIdentifier i filterSequenceId znajduje blokady pasujące do dowolnej z wartości; filtr typu błędu nadal dotyczy wszystkich wyników. Limit wyszukiwań jest wspólny dla wszystkich identyfikatorów wpisanych w tej samej sekwencji.
Rejestracje aplikacji uwierzytelniających
Operacje aplikacji uwierzytelniających są w Swaggerze pogrupowane pod tenant user authenticator apps. Operacja listy zwraca bezpieczne podsumowania rejestracji, a operacja szczegółowa zwraca wrażliwe dane wymagane do kontrolowanej synchronizacji.
| Operacja | Endpoint | Sukces | Cel |
|---|---|---|---|
| Lista | GET /!userauthenticatorapps?userId={userId} |
200 OK |
Zwraca ID rejestracji i czasy utworzenia bez secrets ani danych hashu recovery code. |
| Pobierz | GET /!userauthenticatorapp?userId={userId}&id={id} |
200 OK |
Zwraca jedną rejestrację wraz z TOTP secret i danymi hashu recovery code. |
| Utwórz | POST /!userauthenticatorapp |
201 Created |
Tworzy rejestrację z unikalnym ID podanym przez klienta. |
| Aktualizuj | PUT /!userauthenticatorapp |
200 OK |
Zastępuje secret i dane hashu recovery code dla wybranego ID użytkownika i rejestracji. |
| Usuń | DELETE /!userauthenticatorapp?userId={userId}&id={id} |
204 No Content |
Usuwa jedną rejestrację. |
| Usuń wszystkie | DELETE /!userauthenticatorapps?userId={userId} |
204 No Content |
Usuwa wszystkie rejestracje aplikacji uwierzytelniających użytkownika. |
Dołącz każdy endpoint do bazy endpointu. Przykład:
GET https://control.foxids.com/api/{tenant_name}/{track_name}/!userauthenticatorapps?userId=e061ed17-7b44-48a8-b224-ecdb800ed5cc
Authorization: Bearer {access_token}
Zasób rejestracji
Operacje tworzenia i aktualizacji używają pełnego zasobu rejestracji:
{
"userId": "e061ed17-7b44-48a8-b224-ecdb800ed5cc",
"id": "7a772286-76a2-4f17-a0f8-4e927bb1772d",
"createTime": 1785769200,
"secret": "TOTP-SHARED-SECRET",
"recoveryCode": {
"hashAlgorithm": "P2HS512:10",
"hash": "RECOVERY-CODE-HASH",
"hashSalt": "RECOVERY-CODE-SALT"
}
}
Właściwości zachowują się następująco:
userIdto stabilny identyfikator użytkownika FoxIDs.idto trwały identyfikator rejestracji podawany przez klienta podczas tworzenia. Wybiera rejestrację podczas aktualizacji i nie może zostać zmieniony.createTimejest wyrażony w sekundach Unix. Podczas tworzenia jest opcjonalny i domyślnie przyjmuje bieżący czas. Pominięty podczas aktualizacji zachowuje istniejącą wartość.secretto współdzielony TOTP secret wymagany podczas tworzenia i aktualizacji.recoveryCodezawiera dane hashu recovery code i jest pomijany, gdy recovery code nie jest skonfigurowany.
Użytkownik może mieć maksymalnie pięć rejestracji aplikacji uwierzytelniających. Tworzenie z istniejącym ID rejestracji zwraca 409 Conflict; tworzenie po osiągnięciu limitu zwraca 400 Bad Request.
Synchronizowanie rejestracji
Usługa synchronizacji może połączyć interaktywną Authenticator App notification API z tymi operacjami Control API:
- Odbierz notification
registeredzawierającąuser_idiregistration_id. - Pobierz rejestrację ze source deployment za pomocą operacji szczegółowej.
- Utwórz rejestrację w target deployment lub zaktualizuj ją, jeśli istnieje już to samo ID rejestracji.
Operacje Control API do tworzenia, aktualizowania i usuwania nie wywołują Authenticator App notification API. Synchronizacja nie tworzy więc pętli notification.
Bezpieczeństwo
Operacje szczegółowe, tworzenia i aktualizacji ujawniają lub przyjmują secret aplikacji uwierzytelniającej i dane hashu recovery code. Przyznawaj wymagane uprawnienie użytkownika tylko zaufanym klientom, używaj TLS, chroń payloads podczas przechowywania i nie loguj request ani response bodies.
Użyj operacji listy, gdy potrzebne są tylko ID rejestracji i czasy utworzenia. Nie zwraca ona secret ani danych hashu recovery code.
Właściwość zgodności
Właściwość activeTwoFactorApp ogólnego API użytkownika jest deprecated i planowana do usunięcia po 1 sierpnia 2027 r. W update-request wartość false nadal usuwa wszystkie rejestracje ze względu na zgodność; true lub pominięta wartość pozostawia je bez zmian. Nowe integracje powinny używać endpointów aplikacji uwierzytelniających.
Odpowiedzi błędów
Typowe odpowiedzi błędów operacji użytkowników i aplikacji uwierzytelniających:
400 Bad Request, gdy identyfikatory, dane uwierzytelniające, filtry lub dane zasobu są nieprawidłowe albo osiągnięto limit rejestracji.401 Unauthorized, gdy brakuje access tokenu lub jest on nieprawidłowy.403 Forbidden, gdy klient nie ma wymaganego prawa użytkownika do środowiska.404 Not Found, gdy użytkownik lub rejestracja aplikacji nie istnieje.409 Conflict, gdy użytkownik już istnieje lub ponownie użyto ID rejestracji.423 Locked, gdy tworzenie lub import zbiorczy są chwilowo zablokowane. Spróbuj ponownie po krótkiej przerwie.
Szczegóły walidacji znajdują się w response body. Zadeklarowane odpowiedzi każdej operacji sprawdzisz w Swagger UI.
Impersonowane sesje
Aktywne sesje zachowują identyfikatory pierwotnie uwierzytelnionego użytkownika. Szczegóły impersonacji identyfikują użytkownika docelowego oddzielnie, obejmując subject, format subject, e-mail, telefon, nazwę użytkownika i odwołanie do konta wewnętrznego, jeśli są dostępne. Aktywną sesję można znaleźć przy użyciu identyfikatorów dowolnego z tych użytkowników.
Claims tokenu odświeżania reprezentują tożsamość wydaną aplikacji; szczegóły impersonacji grantu identyfikują pierwotnie uwierzytelnionego użytkownika i wybranego użytkownika docelowego. Cofnięcie dostępu uwzględnia oba powiązane konta. Konfigurację przepływu i zachowanie sesji opisano w sekcji Impersonacja.