Użycie powłoki Bash, do zautomatyzowania generowania tokenów API do uzyskiwania dostępu i pobierania EODATA, gdy uwierzytelnianie 2FA jest włączone w NSIS.
Podczas generowania tokena Keycloak jedną z części tego procesu jest uzyskanie 6-cyfrowego kodu TOTP. W tym artykule wygenerujemy token Keycloak bez konieczności ręcznego wprowadzania 6-cyfrowego kodu.
Udostępniamy kod Bash umożiwiający:
automatyczne generowanie 6-cyfrowego kodu TOTP,
użycie wygenerowanego kodu, aby uzyskać token Keycloak, a na koniec
pobranie przykładowego produktu EODATA.
Co zostanie omówione?
Znaczenie uzyskania i zachowania tajnego kodu dla TOTP
Uzyskanie tajnego kodu dla TOTP
Generowanie i zapisywanie kodu TOTP przy użyciu skryptu Bash
Pobieranie obrazu z EODATA
Wymagania wstępne
Nr 1 Konto
Jest wymagane aktywne konto NSIS: https://horizon.cloudferro.com
Nr 2 Bash, oathtool, Python, wget i curl
Jeśli do wygenerowania kodu TOTP i pobrania EODATA zamierzasz użyć skryptu Bash , będziesz potrzebować odpowiedniego środowiska do jego uruchomienia. Do wykonania tej czynności można użyć systemu Ubuntu 22.04 lub CentOS 7.
Można na przykład użyć lokalnego komputera z systemem Linux lub utworzonej maszyny wirtualnej. Jeśli chcesz użyć maszyny wirtualnej działającej w chmurze NSIS, możesz ją utworzyć, postępując zgodnie z tym artykułem:
Aby wykonać ten przepływ pracy w systemie Windows 10 lub 11, najlepiej użyć WSL - podsystemu Windows dla systemu Linux. Podstawowy przewodnik znajduje się w artykule:
Jeśli nie musisz używać klienta OpenStack CLI na tym komputerze, nie musisz wykonywać kroków od 3 do 5 z tego artykułu.
Niezależnie od używanej wersji systemu Linux, aby skorzystać z przykładowego skryptu, należy zainstalować narzędzia o nazwach wget, oathtool i curl. Potrzebne będzie również środowisko Python, ponieważ część kodu do generowania tokena Keycloak wykorzystuje moduł Pythona o nazwie json.tool. Na Ubuntu można zainstalować te wymagane pakiety za pomocą następującego polecenia:
sudo apt install -y oathtool curl python3 wget
Jeśli korzystasz z systemu CentOS, możesz zainstalować te pakiety za pomocą następującego polecenia:
sudo yum install -y oathtool curl python3 wget
Nr 3 Edytor tekstu
W tym artykule zostanie napisany skrypt. Możesz użyć do tego celu swojego ulubionego edytora tekstu, który jest dostępny w środowisku, w którym będziesz uruchamiać ten skrypt.
Jako przykład, w tym artykule użyto nano. Możesz zainstalować to oprogramowanie na Ubuntu za pomocą następującego polecenia:
sudo apt install -y nano
W systemie CentOS można to zrobić za pomocą następującego polecenia:
sudo yum install -y nano
Znaczenie uzyskania i zachowania tajnego kodu dla TOTP
Aby uwierzytelnić użytkownika i jego zdalny terminal/komputer/urządzenie, algorytm TOTP musi uzyskać specjalny klucz, który nazwiemy kluczem secret. Jest to 32-znakowy ciąg znaków, który witryna pokaże tylko raz, podczas procesu tworzenia i weryfikacji konta. Jest on następnie wykorzystywany przez wybrane oprogramowanie do generowania 6-cyfrowych kodów TOTP, które są wymagane do zalogowania się na konto NSIS.
Jeśli chcesz zautomatyzować generowanie tych 6-cyfrowych kodów dla swoich skryptów, musisz mieć dostęp do tego tajnego kodu. Problem polega na tym, że niektóre aplikacje mogą nie pozwalać na wyodrębnienie tego kodu po ich skonfigurowaniu. Dlatego najlepiej będzie, jeśli
zapiszesz klucz „secret” w bezpiecznym miejscu, do którego masz dostęp podczas konfigurowania konta, lub
użyjesz oprogramowania, takiego jak na przykład KeePassXC, które umożliwia wyodrębnienie tajnego kodu.
Krok 1 Uzyskanie tajnego kodu TOTP
Aby umożliwić skryptowi generowanie kodów TOTP, konieczne będzie uzyskanie tajnego klucza.
Metoda 1: Podczas konfiguracji konta
Przejdź na stronę https://tm.nsiscloud.polsa.gov.pl i utwórz konto.
Zanim będzie możliwe zalogowanie, zostanie wyświetlone okno proszące o skonfigurowanie uwierzytelniania dwuskładnikowego. Będzie ono wyglądał podobnie do tego:
Nadszedł czas, aby skonfigurować uwierzytelnianie dwuskładnikowe na wszystkich urządzeniach, z których zamierzasz korzystać (takich jak komputer stacjonarny lub telefon komórkowy).
Informacja
Powyższa ilustracja przedstawia formularz uwierzytelniający, który wspomina o aplikacjach FreeOTP i Google Authenticator, ale nie są to jedyne opcje. Istnieją inne aplikacje mobilne, które można wykorzystać do tego celu. Jeśli nie chcesz korzystać z urządzenia mobilnego, możesz użyć oprogramowania takiego jak KeePassXC na komputerze stacjonarnym.
Twój tajny kod jest teraz dostępny w kodzie QR i jeśli od razu wypełnisz formularz, zniknie. W takim przypadku (w zależności od używanej aplikacji) możesz nie być w stanie odzyskać kodu i będziesz trzeba go zresetować. Aby uzyskać więcej informacji, zobacz artykuł /accountmanagement/How-to-manage-TOTP- authentication-on-NSIS-Cloud.
Dlatego nie wypełniaj formularza, ale kliknij link Nie można zeskanować?, aby wyświetlić tajny kod w postaci zwykłego tekstu czytelnego dla człowieka. Strona internetowa powinna teraz wyglądać podobnie do tej:
Po wyświetleniu tajnego kodu na ekranie skopiuj go i zapisz w bezpiecznym miejscu.
Dobrym sposobem na zachowanie dostępu do tajnego kodu i wykorzystanie go do generowania kodów TOTP jest skonfigurowanie KeePassXC, który jest programem desktopowym. Aby dowiedzieć się więcej, przeczytaj artykuł:
Uwierzytelnianie dwuskładnikowe do witryny NSIS przy użyciu KeePassXC na komputerze stacjonarnym
Ostrzeżenie
Jeśli w tym momencie odświeżysz ekran przeglądarki, 32-znakowy kod będzie inny. Zmieni się nawet po kliknięciu linku Nie można zeskanować?. Na przykład kod QR może pokazywać tajny kod dla KZFHIRCVKNHXI5CWIMZWW6BSKJIGK5TB, podczas gdy na następnym ekranie, pokazując sekret jako ciąg znaków, wartość może wynosić O5XU KR2K K5KF E4TJ M5QW 2RLT JVDH O6TK. Oczywiście są to tylko przykłady i w twoim przypadku prawdopodobnie będzie inaczej.
Zanotuj, którego kodu zamierzasz użyć; na początku nie ma znaczenia, który to jest kod, ale kiedy zaczniesz go używać, będzie to ten, który działa dla twojego konta.
Po zapisaniu tajnego kodu możesz użyć wybranego oprogramowania (np. KeePassXC) do wygenerowania kodu TOTP, aby dokończyć wypełnianie formularza. Gdy wszystko będzie gotowe, kliknij przycisk Prześlij.
To banał, ale warto to powtórzyć: im więcej wysiłku poświęcisz na środki bezpieczeństwa, tym lepiej na dłuższą metę. Przechowuj tajny ciąg znaków w bezpiecznym miejscu, nie przekazuj go ani nie wysyłaj innym osobom w czytelnej formie, twórz kopie zapasowe na kilku urządzeniach i tak dalej.
Metoda 2: Wyodrębnienie kodu z aktualnie używanej aplikacji
Jeśli masz już konto i używasz jakiegoś oprogramowania do generowania kodów TOTP, możesz być w stanie wydobyć z niego tajny kod. Niektóre aplikacje to obsługują, inne nie. Na przykład niektóre wersje FreeOTP nie obsługują tej funkcji, podczas gdy w KeePassXC można wyodrębnić tajny kod z bazy danych haseł. Inne aplikacje TOTP będą miały swoje własne zasady, które z czasem mogą ulec zmianie.
Co zrobić, jeśli żadna z tych metod nie działa?
Jeśli żadna z tych metod nie zadziała, skontaktuj się z obsługą klienta pod adresem nsis-support@cloudferro.com, aby uzyskać pomoc.
Krok 2: Przygotowania do utworzenia skryptu Bash
W tej sekcji dowiesz się, jak napisać kod, który automatycznie generuje niezbędne dane uwierzytelniające i wykorzystuje je do pobrania przykładowego produktu EODATA. Oto kroki tego procesu.
Automatyczne generowanie 6-cyfrowego kodu TOTP
Użyj tych kodów, aby wygenerować token Keycloak
Pobierz przykładowy produkt Sentinel-2A
Użyj oprogramowania o nazwie oathtool, aby wygenerować kod TOTP w wierszu poleceń. Polecenie jest następujące:
oathtool -b --totp '<SECRET>'
Zastąp w nim <SECRET> tajnym kodem uzyskanym w kroku 1.
Wynik powinien zawierać sześciocyfrowy kod TOTP.
Upewnij się, że ta metoda generuje ten sam kod TOTP, co aktualnie używane do tego celu oprogramowanie.
Użyj polecenia curl, aby sprawdzić, czy uzyskany token Keycloak działa:
curl --location --request POST 'https://identity.cloudferro.com/auth/realms/NSIS-Cloud/protocol/openid-connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=password' \
--data-urlencode 'username=<USER>' \
--data-urlencode 'password=<PASSWORD>' \
--data-urlencode 'client_id=nsis-public' \
-d 'totp=<TOTP>'
W powyższym poleceniu zastąp:
<USER> twoim adresem e-mail
<PASSWORD hasłem do konta
<TOTP> 6-cyfrowym kodem TOTP wygenerowanym przez używane do tego celu oprogramowanie.
Dane wyjściowe powinny zaczynać się od:
{"access_token":"
Po tej sekwencji powinien zostać wyświetlony token Keycloak i inne znaki.
Jeśli proces nie powiedzie się i masz pewność, że twoje konto jest aktywne i wprowadzasz prawidłowe dane logowania, skontaktuj się z działem obsługi klienta NSIS w celu uzyskania pomocy: Helpdesk i wsparcie
Krok 3: Tworzenie i testowanie skryptu Bash
W tej sekcji zostanie utworzony przykładowy skrypt Bash. Uzyska on token Keycloak przy użyciu poleceń przetestowanych w poprzednim kroku. Następnie przekaże go do polecenia, które pobierze przykładowy plik EODATA.
Na początku kod zostanie objaśniony szczegółowo, wiersz po wierszu. Na koniec otrzymasz kompletny kod, który możesz wkleić do pliku i wykonać.
Rozpocznij skrypt od następującego wiersza:
#!/bin/bash
Następnie użyj narzędzia oathtool do wygenerowania 6-cyfrowego kodu TOTP i przekaż go do zmiennej o nazwie totp:
totp=$(oathtool -b <SECRET>)
W powyższym poleceniu zastąp <SECRET tajnym kodem uzyskanym w kroku 1. Poniższe polecenie powinno przekazać token Keycloak do zmiennej o nazwie ACCESS_TOKEN.
ACCESS_TOKEN=$(curl --location --request POST 'https://identity.cloudferro.com/auth/realms/NSIS-Cloud/protocol/openid-connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=password' \
--data-urlencode 'username=<USER>' \
--data-urlencode 'password=<PASSWORD>' \
--data-urlencode 'client_id=nsis-public' \
-d "totp=$totp" | cut -d '"' -f 4 )
W powyższym poleceniu zastąp <USER> swoim adresem e-mail. a <PASSWORD> swoim hasłem.
Teraz użyj uzyskanego tokena Keycloak, aby pobrać przykładowy produkt Sentinel-2A i zapisz go jako example_odata.zip. Pamiętaj, że jeśli masz już taki plik w katalogu, z którego uruchamiany jest skrypt, zostanie on zastąpiony.
wget --header "Authorization: Bearer $ACCESS_TOKEN" 'https://catalogue.nsiscloud.polsa.gov.pl/odata/v1/Products(db0c8ef3-8ec0-5185-a537-812dad3c58f8)/$value' -O example_odata.zip
Powinien się rozpocząć proces pobierania. Po jego zakończeniu możesz otworzyć pobrany plik zip za pomocą wybranego oprogramowania obsługującego ten format i sprawdzić, czy zawartość archiwum jest poprawna.
Oto kompletny skrypt:
#!/bin/bash
totp=$(oathtool -b --totp <SECRET>)
ACCESS_TOKEN=$(curl --location --request POST 'https://identity.cloudferro.com/auth/realms/NSIS-Cloud/protocol/openid-connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=password' \
--data-urlencode 'username=<USER>' \
--data-urlencode 'password=<PASSWORD>' \
--data-urlencode 'client_id=nsis-public' \
-d "totp=$totp" | cut -d '"' -f 4 )
wget --header "Authorization: Bearer $ACCESS_TOKEN" 'https://catalogue.nsiscloud.polsa.gov.pl/odata/v1/Products(db0c8ef3-8ec0-5185-a537-812dad3c58f8)/$value' -O example_odata.zip
Użyj wybranego edytora, aby zapisać powyższy kod jako plik. Na przykład, można użyć nano, aby wywołać plik download_product.sh:
nano download_product.sh
Wklej powyższy skrypt Bash i zamień <SECRET>, <USERNAME> i <PASSWORD> jak wyjaśniono powyżej. Naciśnij CTRL+X. Naciśnij na klawiaturze literę odpowiadającą Tak.
Dodaj do skryptu uprawnienia execute:
chmod +x download_product.sh
Wykonaj skrypt:
./download_product.sh
Powinny być widoczne dane wyjściowe z wget. Powinien znajdować się w nich link, z którego pobierany jest plik.
Produkt powinien zostać pobrany pod nazwą example_odata.zip. Po tym procesie powinien być widoczny po wykonaniu polecenia ls: