Directory Connector
Directory Connector umożliwia FoxIDs używanie zewnętrznego katalogu jako autorytatywnego źródła haseł użytkowników wewnętrznych i wybranych danych użytkownika.
Użytkownicy nadal istnieją jako użytkownicy wewnętrzni w środowisku FoxIDs. Podczas uwierzytelniania hasłem i operacji w cyklu życia hasła FoxIDs wywołuje API Directory Connector zamiast walidować hasło wyłącznie względem wewnętrznego użytkownika FoxIDs.
Ponieważ FoxIDs utrzymuje wewnętrzny rekord użytkownika, obsługę uwierzytelniania wieloskładnikowego (MFA) w FoxIDs można dodać do użytkowników z zewnętrznego repozytorium. Connector może zwracać ustawienia użytkownika związane z MFA, takie jak requireMultiFactor i wyłączone metody two-factor, a FoxIDs stosuje te ustawienia do użytkownika wewnętrznego, podczas gdy zewnętrzne repozytorium pozostaje autorytatywne dla haseł i wybranych danych użytkownika.
Dla Active Directory FoxIDs zawiera komponent Directory Connector dla Active Directory wdrażalny w IIS.
Użyj Directory Connector, gdy:
- chcesz, aby użytkownicy logowali się przy użyciu zwykłej metody uwierzytelniania login.
- chcesz włączyć użytkowników z istniejącego katalogu dla aplikacji OpenID Connect i SAML 2.0 przez FoxIDs.
- zewnętrzny katalog jest autorytatywny dla walidacji haseł i zmian haseł.
- chcesz, aby FoxIDs utrzymywał wewnętrzny rekord użytkownika z identyfikatorami, właściwościami, claims, ustawieniami uwierzytelniania wieloskładnikowego (MFA), przydziałami dostępu i opcjonalnie lokalną kopią hasła.
- chcesz mieć możliwość późniejszego przejścia na użytkowników wewnętrznych i walidację haseł w FoxIDs bez zmuszania wszystkich użytkowników do resetu hasła.
Na każde środowisko przypada jeden Directory Connector. Po włączeniu działa on na poziomie środowiska.
Jak to działa
Gdy użytkownik loguje się przy użyciu nazwy użytkownika i hasła, FoxIDs wywołuje API Directory Connector.
Po pomyślnej walidacji FoxIDs tworzy lub aktualizuje użytkownika wewnętrznego w środowisku na podstawie odpowiedzi API. Odpowiedź musi zawierać stabilne directoryUserId, które jest zapisywane przy użytkowniku wewnętrznym i służy do powiązania użytkownika FoxIDs z użytkownikiem w katalogu zewnętrznym.
directoryUserId nie jest identyfikatorem użytkownika znanym użytkownikowi końcowemu. Jest to oddzielny, stabilny identyfikator w katalogu zewnętrznym. Nie używaj adresu e-mail, telefonu ani nazwy użytkownika jako directoryUserId, ponieważ te wartości mogą się zmieniać. Wartość musi być stabilna i unikalna w katalogu zewnętrznym.
Jeśli FoxIDs zna już directoryUserId użytkownika wewnętrznego, jest ono wysyłane w żądaniu Directory Connector razem z dokładnie jednym z identyfikatorów użytkownika: adresem e-mail, telefonem lub nazwą użytkownika. Dzięki temu katalog zewnętrzny może zidentyfikować użytkownika nawet wtedy, gdy identyfikator się zmienił.
Jeśli API Directory Connector pomyślnie zweryfikuje użytkownika, FoxIDs aktualizuje użytkownika wewnętrznego o identyfikatory, wybrane właściwości i claims zwrócone przez API.
Jeśli connector zgłosi, że użytkownik jest wyłączony lub usunięty, FoxIDs wyłączy lub usunie użytkownika wewnętrznego w środowisku.
Lokalna kopia hasła
Katalog zewnętrzny jest autorytatywny tak długo, jak włączony jest Directory Connector. FoxIDs nie wraca do lokalnego hasha hasła, jeśli API Directory Connector jest tymczasowo niedostępne.
Domyślnie FoxIDs zapisuje lokalną kopię hasła przy użytkowniku wewnętrznym po pomyślnej walidacji hasła przez connector lub po operacji z cyklu życia hasła. Można to wyłączyć w ustawieniach środowiska.
Lokalna kopia hasła nie jest używana, gdy Directory Connector jest włączony. Istnieje po to, aby umożliwić późniejsze przejście na użytkowników wewnętrznych i walidację haseł w FoxIDs bez zmuszania wszystkich użytkowników do resetu hasła.
Cykl życia hasła
Operacje z cyklu życia hasła są delegowane do API Directory Connector:
- Uwierzytelnianie hasłem wywołuje endpoint
authentication. - Login create-user flow calls the
create-userendpoint. - Zmiana hasła użytkownika wywołuje endpoint
change-password. - Przepływy ustawiania hasła i resetowania hasła wywołują endpoint
set-password.
FoxIDs zwykle wywołuje endpointy cyklu życia hasła tylko wtedy, gdy użytkownik wewnętrzny jest znany i ma directoryUserId. Wyjątkiem jest change-password podczas pierwszego logowania, gdy katalog zewnętrzny zwrócił password_expired, zanim FoxIDs utworzył użytkownika wewnętrznego. W takim przypadku FoxIDs wysyła identyfikator logowania i bieżące hasło bez directoryUserId; po pomyślnej zmianie hasła FoxIDs używa odpowiedzi sukcesu do utworzenia użytkownika wewnętrznego i zapisania zwróconego directoryUserId.
FoxIDs nie aktualizuje swojej wewnętrznej historii haseł, gdy używany jest Directory Connector, ponieważ FoxIDs nie musi znać wszystkich zmian haseł w katalogu zewnętrznym.
Polityka haseł i komunikaty o błędach
Katalog zewnętrzny egzekwuje politykę haseł. FoxIDs używa polityki haseł środowiska podczas wyświetlania komunikatów o błędach polityki haseł zwracanych przez connector.
Skonfiguruj politykę haseł środowiska tak, aby odpowiadała polityce haseł katalogu zewnętrznego. Jeśli nie są zgodne, użytkownicy mogą widzieć wskazówki dotyczące haseł, które nie odzwierciedlają rzeczywistych wymagań katalogu zewnętrznego.
Na przykład, jeśli katalog zewnętrzny odrzuci hasło, ponieważ jest zbyt krótkie, FoxIDs użyje minimalnej długości hasła z konfiguracji środowiska podczas renderowania komunikatu o błędzie.
Implementacja API
Implementujesz API Directory Connector i konfigurujesz FoxIDs za pomocą bazowego adresu URL i sekretu.
The API has a base URL and four endpoints:
authenticationwaliduje bieżące hasło użytkownika.create-usercreates a new user in the external directory and returns the created user.change-passwordwaliduje bieżące hasło i zmienia je na nowe.set-passwordustawia nowe hasło bez walidacji bieżącego hasła.
Jeśli bazowy adres URL to https://somewhere.org/directory, endpointy są następujące:
https://somewhere.org/directory/authenticationhttps://somewhere.org/directory/create-userhttps://somewhere.org/directory/change-passwordhttps://somewhere.org/directory/set-password
FoxIDs Cloud wywołuje Twoje API z adresu IP
57.128.60.142. Adresy IP mogą się zmieniać lub zostać rozszerzone.
Bezpieczeństwo
Żądania są zabezpieczone za pomocą HTTP Basic authentication:
- Nazwa użytkownika:
directory_connector - Hasło: skonfigurowany sekret API
Wywołanie jest wykonywane metodą HTTP POST z ciałem JSON.
FoxIDs wysyła wybrany język w nagłówku żądania Accept-Language, na przykład Accept-Language: da-DK. W procesie logowania odpowiada on językowi wybranemu przez ui_locales lub przeglądarkę, a FoxIDs używa angielskiego jako języka zastępczego. API może użyć tego nagłówka do lokalizacji komunikatów dla użytkownika i musi wybrać własny język zastępczy, jeśli nie obsługuje żądanego języka. Ten nagłówek jest wysyłany do wszystkich czterech endpointów.
Żądanie authentication
Endpoint authentication otrzymuje hasło użytkownika i dokładnie jeden identyfikator użytkownika. FoxIDs wysyła directoryUserId, jeśli użytkownik wewnętrzny istnieje i wartość jest znana.
{
"directoryUserId": "a1b2c3d4",
"email": "user1@somewhere.org",
"password": "testpass1"
}
Pola:
directoryUserIdjest opcjonalne. FoxIDs wysyła je, gdy użytkownik wewnętrzny istnieje i wartość jest znana.- Wysyłane jest dokładnie jedno z pól
email,phonelubusername. passwordjest wymagane.
FoxIDs wybiera identyfikator na podstawie danych logowania podanych przez użytkownika i włączonych ustawień identyfikatorów. Na przykład, jeśli włączona jest tylko nazwa użytkownika, a użytkownik wpisze user1@somewhere.org, FoxIDs wyśle tę wartość jako username. FoxIDs usuwa otaczające białe znaki przed wysłaniem nazwy użytkownika do connectora.
Create-user request
Endpoint create-user otrzymuje dokładnie jeden identyfikator użytkownika, wymagane hasło, wybrane właściwości create-user oraz claims zebrane podczas przepływu create-user w FoxIDs.
{
"email": "user1@somewhere.org",
"password": "testpass1",
"confirmAccount": true,
"requireMultiFactor": false,
"claims": [
{ "type": "given_name", "value": "User" },
{ "type": "family_name", "value": "One" }
]
}
Pola:
- Wysyłane jest dokładnie jedno z pól
email,phonelubusername. passwordjest wymagane. Utwórz użytkownika bez hasła nie jest obsługiwane z Directory Connector, ponieważ API Directory Connector uwierzytelnia użytkowników hasłem.confirmAccountirequireMultiFactorto żądane ustawienia tworzenia użytkownika w FoxIDs.claimszawiera oświadczenia niebędące identyfikatorami, zebrane podczas tworzenia użytkownika w FoxIDs.
W przypadku powodzenia zwróć standardową odpowiedź sukcesu. FoxIDs zapisuje zwrócony directoryUserId w użytkowniku wewnętrznym utworzonym po utworzeniu użytkownika w katalogu zewnętrznym.
Żądanie change-password
Endpoint change-password otrzymuje dokładnie jeden identyfikator użytkownika, bieżące hasło i nowe hasło. FoxIDs wysyła directoryUserId, gdy użytkownik wewnętrzny istnieje i wartość jest znana.
{
"directoryUserId": "a1b2c3d4",
"email": "user1@somewhere.org",
"currentPassword": "oldpass1",
"newPassword": "newpass1"
}
Pola:
directoryUserIdjest opcjonalne. FoxIDs wysyła je, gdy użytkownik wewnętrzny istnieje i wartość jest znana. Może zostać pominięte podczas pierwszego logowania, jeśli katalog zewnętrzny wymaga zmiany hasła, zanim FoxIDs utworzy użytkownika wewnętrznego.- Wysyłane jest dokładnie jedno z pól
email,phonelubusername. currentPasswordinewPasswordsą wymagane.
Żądanie set-password
Endpoint set-password otrzymuje stabilne powiązanie użytkownika z katalogiem, dokładnie jeden identyfikator użytkownika oraz nowe hasło.
{
"directoryUserId": "a1b2c3d4",
"email": "user1@somewhere.org",
"password": "newpass1"
}
Pola:
directoryUserIdjest wysyłane i powinno być używane jako stabilne powiązanie z katalogiem.- Wysyłane jest dokładnie jedno z pól
email,phonelubusername. FoxIDs wybiera pierwszy dostępny wewnętrzny identyfikator użytkownika w kolejności: e-mail, telefon, nazwa użytkownika. passwordjest wymagane.
Odpowiedź sukcesu
W przypadku sukcesu API musi zwrócić kod stanu HTTP 200 oraz odpowiedź użytkownika.
{
"directoryUserId": "a1b2c3d4",
"email": "user1@somewhere.org",
"phone": "+4511223344",
"username": "user1",
"confirmAccount": true,
"emailVerified": true,
"phoneVerified": true,
"disableTwoFactorApp": false,
"disableTwoFactorSms": false,
"disableTwoFactorEmail": false,
"requireMultiFactor": false,
"claims": [
{ "type": "name", "value": "User One" },
{ "type": "role", "value": "employee" }
]
}
FoxIDs używa odpowiedzi do utworzenia lub zaktualizowania użytkownika wewnętrznego w środowisku.
Pola:
directoryUserIdjest wymagane. Musi być stabilne i unikalne w katalogu zewnętrznym i jest zapisywane przy użytkowniku wewnętrznym FoxIDs.email,phoneiusernamesą opcjonalne indywidualnie, ale co najmniej jedno z nich musi być obecne. FoxIDs zapisuje zwrócone wartości jako identyfikatory użytkownika wewnętrznego. Zwrócone wartości identyfikatorów użytkownika muszą jednoznacznie identyfikować jednego użytkownika w katalogu zewnętrznym używanym przez connector.phonemusi zawierać numer kierunkowy kraju w formacie międzynarodowym, na przykład+4511223344.confirmAccountokreśla, czy FoxIDs ma uruchomić przepływ potwierdzenia dla użytkownika wewnętrznego.emailVerifiedokreśla, czy adres e-mail użytkownika wewnętrznego ma zostać oznaczony jako zweryfikowany.phoneVerifiedokreśla, czy numer telefonu użytkownika wewnętrznego ma zostać oznaczony jako zweryfikowany.disableTwoFactorAppwyłącza uwierzytelnianie dwuskładnikowe przy użyciu aplikacji authenticator dla użytkownika wewnętrznego.disableTwoFactorSmswyłącza uwierzytelnianie dwuskładnikowe SMS dla użytkownika wewnętrznego.disableTwoFactorEmailwyłącza uwierzytelnianie dwuskładnikowe e-mail dla użytkownika wewnętrznego.requireMultiFactorokreśla, czy użytkownik wewnętrzny musi używać uwierzytelniania wieloskładnikowego.claimssą opcjonalne. FoxIDs zapisuje zwrócone claims przy użytkowniku wewnętrznym.
FoxIDs ignoruje oświadczenia, w których pole type lub value nie występuje, ma wartość null, jest puste lub zawiera wyłącznie białe znaki. Gdy rejestrowanie śladów komunikatów jest włączone, ślad odpowiedzi zawiera otrzymane oświadczenia przed ich filtrowaniem. Długie komunikaty śledzenia są obcinane.
Odpowiedź błędu
Jeśli Basic authentication zostanie odrzucone, zwróć kod stanu HTTP 401 i invalid_api_id_secret.
{
"error": "invalid_api_id_secret",
"errorMessage": "Invalid API ID or secret."
}
Jeśli użytkownik nie istnieje podczas wywołania endpointu authentication bez directoryUserId, zwróć kod stanu HTTP 400, 401 lub 403 i user_not_exists.
{
"error": "user_not_exists",
"errorMessage": "User not found."
}
Jeśli hasło zostanie odrzucone przez endpoint authentication, zwróć kod stanu HTTP 400, 401 lub 403 i invalid_password.
{
"error": "invalid_password",
"errorMessage": "Invalid password."
}
Jeśli identyfikator użytkownika i hasło są prawidłowe, ale logowanie zostaje odrzucone z innego powodu, zwróć z authentication kod statusu HTTP 400, 401 lub 403 oraz login_rejected. Jest to obsługiwane zarówno z directoryUserId, jak i bez niego. Opcjonalny uiErrorMessage jest wyświetlany jako zwykły tekst w formularzu logowania. API dostarcza przetłumaczony komunikat na podstawie Accept-Language.
{
"error": "login_rejected",
"errorMessage": "Credentials verified; login rejected by directory policy.",
"uiErrorMessage": "You cannot log in here. Contact support."
}
Jeśli uiErrorMessage zostanie pominięty, ma wartość null, jest pusty lub zawiera tylko białe znaki, FoxIDs wyświetla ten sam zlokalizowany ogólny komunikat logowania co dla invalid_password, user_not_exists, user_disabled i user_deleted. Odrzucone logowanie jest uwzględniane przez istniejącą ochronę przed wielokrotnymi nieudanymi próbami logowania. Nie powoduje utworzenia, aktualizacji, wyłączenia ani usunięcia użytkownika wewnętrznego.
Jeśli bieżące hasło zostanie odrzucone przez endpoint change-password, zwróć kod stanu HTTP 400, 401 lub 403 i invalid_current_password.
{
"error": "invalid_current_password",
"errorMessage": "Invalid current password."
}
Pole errorMessage zawiera tekst diagnostyczny przeznaczony do dzienników FoxIDs i nie jest wyświetlane użytkownikowi końcowemu. Podaj przyczynę błędu, ale nigdy nie umieszczaj haseł, sekretów API ani kluczy prywatnych.
FoxIDs wyświetla zwrócony uiErrorMessage tylko dla login_rejected. Dla pozostałych obsługiwanych kodów błędów FoxIDs wybiera komunikat dla użytkownika z własnych zlokalizowanych zasobów tekstowych. Tekst diagnostyczny w errorMessage nigdy nie zastępuje komunikatu dla użytkownika.
Obsługiwane kody błędów według endpointu:
| Kod błędu | authentication |
create-user |
change-password |
set-password |
Znaczenie |
|---|---|---|---|---|---|
invalid_api_id_secret |
Tak | Tak | Tak | Tak | Nazwa użytkownika API lub sekret dla HTTP Basic authentication jest nieprawidłowy. |
user_exists |
Nie | Tak | Nie | Nie | Użytkownik o podanym identyfikatorze już istnieje w katalogu zewnętrznym. |
user_not_exists |
Tak, bez directoryUserId |
Nie | Tak, bez directoryUserId |
Nie | Żaden użytkownik w katalogu zewnętrznym nie odpowiada podanym identyfikatorom użytkownika. |
invalid_password |
Tak | Nie | Nie | Nie | Katalog odrzucił hasło w żądaniu uwierzytelnienia. |
login_rejected |
Tak | Nie | Nie | Nie | Logowanie zostało odrzucone po weryfikacji identyfikatora użytkownika i hasła. Opcjonalny uiErrorMessage jest wyświetlany w formularzu logowania. |
invalid_current_password |
Nie | Nie | Tak | Nie | Katalog odrzucił bieżące hasło w żądaniu zmiany hasła. |
create_user_not_supported |
Nie | Tak | Nie | Nie | Konektor nie obsługuje tworzenia użytkowników w katalogu zewnętrznym. |
user_disabled |
Tak | Nie | Tak | Tak | Użytkownik istnieje w katalogu, ale jest wyłączony. FoxIDs wyłączy użytkownika wewnętrznego. |
user_deleted |
Tak, z directoryUserId |
Nie | Tak, z directoryUserId |
Tak, z directoryUserId |
Użytkownik w katalogu zewnętrznym powiązany przez directoryUserId już nie istnieje lub został usunięty. FoxIDs usunie użytkownika wewnętrznego. |
password_not_accepted |
Tak | Tak | Tak | Tak | Hasło weryfikowane, używane podczas tworzenia użytkownika, zmieniane lub ustawiane zostało odrzucone przez regułę haseł w katalogu, której nie odpowiada bardziej szczegółowy kod. |
password_min_length |
Tak | Tak | Tak | Tak | Hasło weryfikowane, używane podczas tworzenia użytkownika, zmieniane lub ustawiane jest krótsze niż minimalna długość hasła w katalogu. |
password_max_length |
Tak | Tak | Tak | Tak | Hasło weryfikowane, używane podczas tworzenia użytkownika, zmieniane lub ustawiane jest dłuższe niż maksymalna długość hasła w katalogu. |
password_banned_characters |
Tak | Tak | Tak | Tak | Hasło weryfikowane, używane podczas tworzenia użytkownika, zmieniane lub ustawiane zawiera co najmniej jeden znak lub wyraz odrzucany przez katalog. |
password_complexity |
Tak | Tak | Tak | Tak | Starszy błąd złożoności znaków, interpretowany przez FoxIDs jako password_character_variation. W nowych integracjach używaj jednego z dwóch szczegółowych kodów błędów dotyczących znaków. |
password_character_repeat |
Tak | Tak | Tak | Tak | Hasło weryfikowane, używane podczas tworzenia użytkownika, zmieniane lub ustawiane zawiera zbyt wiele powtórzeń znaków. |
password_character_variation |
Tak | Tak | Tak | Tak | Hasło weryfikowane, używane podczas tworzenia użytkownika, zmieniane lub ustawiane nie zawiera wystarczająco zróżnicowanych znaków. |
password_email_text_complexity |
Tak | Tak | Tak | Tak | Hasło weryfikowane, używane podczas tworzenia użytkownika, zmieniane lub ustawiane zawiera adres e-mail użytkownika lub jego część. |
password_phone_text_complexity |
Tak | Tak | Tak | Tak | Hasło weryfikowane, używane podczas tworzenia użytkownika, zmieniane lub ustawiane zawiera numer telefonu użytkownika lub jego część. |
password_username_text_complexity |
Tak | Tak | Tak | Tak | Hasło weryfikowane, używane podczas tworzenia użytkownika, zmieniane lub ustawiane zawiera nazwę użytkownika lub jej część. |
password_url_text_complexity |
Tak | Tak | Tak | Tak | Hasło weryfikowane, używane podczas tworzenia użytkownika, zmieniane lub ustawiane zawiera tekst związany z adresem URL FoxIDs. |
password_risk |
Tak | Tak | Tak | Tak | Hasło weryfikowane, używane podczas tworzenia użytkownika, zmieniane lub ustawiane jest znane jako ryzykowne, ujawnione lub niebezpieczne z innego powodu. |
password_history |
Tak | Tak | Tak | Tak | Hasło weryfikowane, używane podczas tworzenia użytkownika, zmieniane lub ustawiane zostało odrzucone, ponieważ było już wcześniej używane. |
password_expired |
Tak | Tak | Tak | Tak | Hasło weryfikowane, używane podczas tworzenia użytkownika, zmieniane lub ustawiane wygasło i musi zostać zmienione, zanim uwierzytelnianie będzie mogło być kontynuowane. |
new_password_equals_current |
Nie | Nie | Tak | Nie | Nowe hasło jest takie samo jak bieżące. set-password nie może zwrócić tego błędu, ponieważ nie otrzymuje bieżącego hasła. |
W przypadku błędów polityki haseł FoxIDs używa polityki haseł środowiska do wyświetlenia komunikatu o błędzie dla użytkownika. Zobacz Polityka haseł i komunikaty o błędach.
Zwracaj wyłącznie kod błędu obsługiwany przez endpoint i przekazany directoryUserId, zgodnie z powyższą tabelą. Nieobsługiwany kod, nieprawidłowo sformatowana odpowiedź lub nieoczekiwany status HTTP oznacza błąd integracji i prowadzi do ogólnej strony błędu. W przypadku błędu technicznego w konektorze zwróć kod stanu HTTP 500. Zobacz Rozwiązywanie problemów z błędami w przeglądarce, aby znaleźć szczegóły diagnostyczne za pomocą identyfikatorów widocznych na stronie błędu.
Błędy uwierzytelniania i prywatność użytkowników
Nieuwierzytelniony podmiot wywołujący nie może na podstawie błędu logowania ustalić, czy istnieje dana nazwa użytkownika lub adres e-mail. Podczas uwierzytelniania hasłem FoxIDs przetwarza obsługiwane błędy w następujący sposób:
| Błąd konektora | Wynik widoczny dla użytkownika |
|---|---|
invalid_password, user_not_exists, user_disabled lub user_deleted |
Ten sam ogólny komunikat logowania, na przykład Nieprawidłowy adres e-mail lub hasło., przetłumaczony na aktywny język i dostosowany do włączonych identyfikatorów logowania. |
login_rejected |
Podany uiErrorMessage lub ten sam ogólny komunikat logowania, jeśli go brakuje albo jest pusty, w tym samym miejscu formularza logowania. |
password_not_accepted |
Strona zmiany hasła z ogólnymi wskazówkami dotyczącymi polityki haseł. |
password_expired lub inny szczegółowy błąd polityki haseł |
Strona zmiany hasła z odpowiednimi zlokalizowanymi wskazówkami dotyczącymi polityki haseł. |
Konektor musi zweryfikować podane bieżące hasło przed zwróceniem błędu polityki haseł z authentication. W przeciwnym razie inna strona lub komunikat może umożliwić atakującemu odkrywanie użytkowników i potwierdzanie ich identyfikatorów przez odgadywanie nazw użytkowników lub adresów e-mail. W przypadku change-password zweryfikuj bieżące hasło przed zwróceniem wskazówek dotyczących nowego hasła, które są specyficzne dla konta. Ogólne kontrole formatu nie mogą ujawniać, czy konto istnieje.
Jeśli z jakiegokolwiek powodu użytkownik nie może logować się za pomocą tego procesu logowania, najpierw zweryfikuj podany identyfikator użytkownika i hasło. Odmowę opartą na tym ograniczeniu zwracaj dopiero po pomyślnej weryfikacji obu danych, aby ograniczenie nie ujawniło, czy odgadnięty identyfikator należy do rzeczywistego użytkownika. Zwróć login_rejected z authentication, umieść przyczynę diagnostyczną w errorMessage i opcjonalnie podaj bezpieczne wskazówki dla użytkownika w uiErrorMessage. Jeśli nie można zweryfikować danych logowania, zwróć zwykły błąd uwierzytelniania bez ujawniania ograniczenia.
FoxIDs polega na tym, że connector zweryfikuje dane logowania przed zwróceniem login_rejected; pomyślne wyszukanie konta ani znajomość directoryUserId nie wystarczą. Przed weryfikacją danych logowania wszelkie instrukcje lub przyciski dotyczące alternatywnych metod logowania należy wyświetlać niezależnie od tego, czy podany identyfikator odpowiada kontu.
Używaj user_disabled i user_deleted wyłącznie do zgłaszania odpowiedniego stanu konta w katalogu. Powodują one również wyłączenie lub usunięcie użytkownika wewnętrznego i cofnięcie jego dostępu; nie są to ogólne kody odmowy logowania.
Obsługuj błędy w spójny sposób dla znanych i nieznanych identyfikatorów, uwzględniając obserwowalne czasy odpowiedzi i ochronę przed powtarzanymi próbami. Sam ogólny komunikat nie zapobiega odkrywaniu użytkowników, jeśli inne przekierowanie, status lub czas odpowiedzi ujawnia wynik. Przy implementacji konektora przestrzegaj wytycznych OWASP dotyczących błędów uwierzytelniania.
Przykład API
Przykład DirectoryConnectorApiSample pokazuje, jak zaimplementować API Directory Connector w ASP.NET Core.
Przykład obejmuje:
- endpointy
authentication,create-user,change-passwordiset-password. - HTTP Basic authentication z nazwą użytkownika API
directory_connector. - mały katalog in-memory z użytkownikami demonstracyjnymi i stabilnymi wartościami
directoryUserId. - przykłady błędów polityki haseł, takich jak
password_min_length,password_banned_charactersinew_password_equals_current. - przykład wyłączonego użytkownika, który zwraca
user_disabled.
Kolekcji Postman directory-connector-api.postman_collection.json można użyć do wywoływania i testowania przykładowego API za pomocą Postman.
Komponent Active Directory
FoxIDs zawiera komponent Directory Connector dla Active Directory, który można wdrożyć w IIS. Komponent implementuje API Directory Connector dla jednej domeny AD/LDAP i może walidować hasła, zmieniać hasła, ustawiać hasła, zwracać skonfigurowane atrybuty AD jako claims oraz zwracać skonfigurowane zagnieżdżone członkostwa w grupach AD jako claims.
Konfiguracja
Skonfiguruj Directory Connector w ustawieniach środowiska w FoxIDs Control Client.
- Wybierz kartę Settings.
- Wybierz kartę Environment.
- Znajdź sekcję Directory Connector.
- Włącz Directory Connector.
- Dodaj bazowy adres URL API bez folderu endpointu w polu API URL.
- Dodaj API secret.
- Zdecyduj, czy lokalna kopia hasła ma być zapisywana.
- Skonfiguruj politykę haseł środowiska tak, aby odpowiadała polityce haseł katalogu zewnętrznego.
- Kliknij Update.
