Uwierzytelnianie z OpenstackSDK przy użyciu poświadczeń Keycloak na NSIS Cloud
Jeśli używasz OpenStackSDK do pisania własnych skryptów dla OpenStack, kod w tym samouczku włączy użytkownikowi automatyczne logowanie do twojej aplikacji. Normalnie, gdy użytkownik próbuje zalogować się do konta NSIS Cloud przy użyciu https://tm.nsiscloud.polsa.gov.pl, musi logować się ręcznie. Zostanie wyświetlony ekran podobny do tego:
Jeśli użytkownik ma już konto, zostanie zalogowany po kliknięciu przycisku Zaloguj . Kod przedstawiony w tym artykule sprawi, że wyświetlanie użytkownikowi takiego procesu nie będzie konieczne, a jeśli użytkownik został kiedykolwiek uwierzytelniony w OpenStack, będzie mógł zalogować się za pomocą twojego kodu nawet bez wyświetlania ekranu logowania.
Co zostanie omówione?
Konfigurowanie środowiska Python, pip oraz środowiska Venv,
Pobieranie pliku RC z Horizon,
Ładowanie tego pliku (wykonanie go i podanie hasła w celu uwierzytelnienia się w systemie),
Przygotowanie kodu w języku Pythona w celu uwierzytelnienia w Keycloak przy użyciu wartości z pliku RC.
Wymagania wstępne
Nr 1 Instalacja oprogramowania Python i jego środowiska
Poniższy artykuł pomoże Ci zainstalować środowisko Python oraz pip oraz Venv: Jak zainstalować Python virtualenv lub virtualenvwrapper na NSIS Cloud.
Nr 2 Plik RC
Plik RC jest dostępny z modułu OpenStack Horizon i służy jako źródło uwierzytelnienia użytkownika. Aby uzyskać szczegółowe informacje, jak go pobrać i aktywować, zobacz artykuł Jak zainstalować klientów OpenStack i Magnum dla interfejsu wiersza poleceń w NSIS Horizon?.
Krok 1 Załaduj swój plik RC
Korzystając z sekcji Wymaganie wstępnego nr 2, pobierz odpowiedni plik RC. Plik ten może być wykonany przy użyciu polecenia source w środowiskach Linux/UNIX. Po wykonaniu plik poprosi o podanie hasła i uwierzytelni cię z jego użyciem.
Poniżej przedstawiono zmienne systemowe (ich nazwy zaczynają się od OS_), które zostaną również ustawione poleceniem source:
export OS_AUTH_URL=https://keystone.cloudferro.com:5000/v3
export OS_INTERFACE=public
export OS_IDENTITY_API_VERSION=3
export OS_USERNAME="Twój adres e-mail"
export OS_REGION_NAME="WAW4-1"
export OS_PROJECT_ID="ID twojego projektu"
export OS_PROJECT_NAME="Nazwa twojego projektu"
export OS_PROJECT_DOMAIN_ID="ID twojej domeny"
export OS_AUTH_TYPE=v3oidcpassword
export OS_PROTOCOL=openid
export OS_DISCOVERY_ENDPOINT=https://identity.cloudferro.com/auth/realms/NSIS-Cloud/.well-known/openid-configuration
export OS_IDENTITY_PROVIDER=nsis-prod_provider
export OS_CLIENT_ID=openstack
export OS_CLIENT_SECRET=50xx4972-546x-46x9-8x72-x91x401x8x30
Krok 2 Utwórz kod w języku Python, który wykona uwierzytelnienie Keycloak w twojej aplikacji
W tym kroku skopiujesz wartości z pliku RC do swojego kodu w języki Python. Na przykład zmienna
OS_DISCOVERY_ENDPOINT=https://identity.cloudferro.com/auth/realms/NSIS-Cloud/.well-known/openid-configuration
z pliku RC stanie się wartością zmiennej o tej samej nazwie w twoim kodzie:
auth['discovery_endpoint'] = "https://identity.cloudferro.com/auth/realms/NSIS-Cloud/.well-known/openid-configuration"
Twój kod powinien ostatecznie wyglądać w następujący sposób:
from openstack import connection
import sys
import os
from openstack import enable_logging
auth = {}
auth['auth_url'] = "https://keystone.cloudferro.com:5000/v3"
auth['username'] = "Twój adres e-mail"
auth['password'] = os.getenv('OS_PASSWORD')
auth['project_domain_id'] = "ID twjej domeny"
auth['project_name'] = "Nazwa twojego projektu"
auth['project_id'] = "ID twojego projektu"
auth['discovery_endpoint'] = "https://identity.cloudferro.com/auth/realms/NSIS-Cloud/.well-known/openid-configuration"
auth['client_id'] = "openstack"
auth['identity_provider'] = 'nsis-prod_provider'
auth['client_secret'] = os.getenv('OS_CLIENT_SECRET')
auth['protocol'] = 'openid'
Krok 3 Użyj kodu w swojej aplikacji
Po wygenerowaniu ten kod uwierzytelni użytkownika, dzięki czemu nie będzie on musiał podawać swoich danych logowania za każdym razem, gdy będzie próbował skorzystać z Twojej aplikacji.