Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Poprzednia część: kod uruchamiania aplikacji głównej
Ścieżka adresu URL aplikacji /api/v1/getcode dla interfejsu API generuje odpowiedź JSON zawierającą kod alfanumeryczny i sygnaturę czasową.
Najpierw dekorator @app.route informuje platformę Flask, że funkcja get_code obsługuje żądania do adresu URL /api/v1/getcode.
@app.route('/api/v1/getcode', methods=['GET'])
def get_code():
Następnie aplikacja wywołuje interfejs API innej firmy, którego adres URL znajduje się w number_url, podając klucz dostępu pobierany z magazynu kluczy w nagłówku.
headers = {
'Content-Type': 'application/json',
'x-functions-key': access_key
}
r = requests.get(url = number_url, headers = headers)
if (r.status_code != 200):
return "Could not get you a code.", r.status_code
Przykładowy interfejs API innej firmy jest wdrażany w środowisku bezserwerowym usługi Azure Functions. Właściwość x-functions-key w nagłówku to sposób, w jaki usługa Azure Functions oczekuje, że klucz dostępu pojawi się w nagłówku. Aby uzyskać więcej informacji, zobacz wyzwalacz HTTP Azure Functions - klucze autoryzacji. Jeśli wywołanie interfejsu API zakończy się niepowodzeniem z jakiegokolwiek powodu, kod zwraca komunikat o błędzie i kod stanu.
Zakładając, że wywołanie interfejsu API powiedzie się i zwróci wartość liczbową, aplikacja tworzy bardziej złożony kod przy użyciu tej liczby oraz niektórych losowych znaków (przy użyciu własnej funkcji random_char).
data = r.json()
chars1 = random_char(3)
chars2 = random_char(3)
code_value = f"{chars1}-{data['value']}-{chars2}"
code = { "code": code_value, "timestamp" : str(datetime.utcnow()) }
Zmienna code zawiera pełną odpowiedź JSON dla interfejsu API aplikacji, która zawiera wartość kodu i znacznik czasu. Przykładową odpowiedzią będzie {"code":"ojE-161-pTv","timestamp":"2020-04-15 16:54:48.816549"}.
Przed zwróceniem tej odpowiedzi zapisuje jednak komunikat w kolejce magazynu przy użyciu metody send_message klienta kolejki:
queue_client.send_message(code)
return jsonify(code)
Przetwarzanie komunikatów kolejek
Komunikaty przechowywane w kolejce można wyświetlać i zarządzać za pomocą Portalu Azure, polecenia az storage message get Azure CLI lub Eksploratora Azure Storage. Przykładowe repozytorium zawiera skrypt (test.cmd i test.sh), aby zażądać kodu z punktu końcowego aplikacji, a następnie sprawdzić kolejkę komunikatów. Istnieje również skrypt umożliwiający wyczyszczenie kolejki przy użyciu polecenia az storage message clear.
Zazwyczaj aplikacja podobna do tej w tym przykładzie będzie miała inny proces, który asynchronicznie ściąga komunikaty z kolejki w celu dalszego przetwarzania. Jak wspomniano wcześniej, odpowiedź wygenerowana przez ten punkt końcowy interfejsu API może być używana w innym miejscu w aplikacji z uwierzytelnianiem użytkownika dwuskładnikowego. W takim przypadku aplikacja powinna unieważnić kod po upływie określonego czasu, na przykład 10 minut. Prostym sposobem wykonania tego zadania jest utrzymanie tabeli prawidłowych kodów uwierzytelniania dwuskładnikowego, które są używane przez procedurę logowania użytkownika. Następnie aplikacja będzie miała prosty proces monitorowania kolejek z następującą logiką (w pseudokodzie):
pull a message from the queue and retrieve the code.
if (code is already in the table):
remove the code from the table, thereby invalidating it
else:
add the code to the table, making it valid
call queue_client.send_message(code, visibility_timeout=600)
Ten pseudo-kod wykorzystuje opcjonalny parametr send_message metody visibility_timeout, który określa liczbę sekund, zanim komunikat stanie się widoczny w kolejce. Ponieważ domyślny limit czasu wynosi zero, komunikaty początkowo zapisywane przez punkt końcowy interfejsu API stają się natychmiast widoczne dla procesu monitorującego kolejkę. W rezultacie proces ten przechowuje je w prawidłowej tabeli kodu od razu. Proces ponownie kolejkuje ten komunikat z ograniczeniem czasowym, dzięki czemu otrzyma kod ponownie 10 minut później, po czym usunie go z tabeli.
Implementowanie głównego punktu końcowego interfejsu API aplikacji w usłudze Azure Functions
Kod przedstawiony wcześniej w tym artykule używa platformy internetowej Flask do utworzenia punktu końcowego interfejsu API. Ponieważ platforma Flask musi działać z serwerem internetowym, taki kod musi zostać wdrożony w usłudze Azure App Service lub na maszynie wirtualnej.
Alternatywną opcją wdrożenia jest środowisko bezserwerowe usługi Azure Functions. W takim przypadku cały kod uruchomienia i kod punktu końcowego interfejsu API będą zawarte w tej samej funkcji, która jest powiązana z wyzwalaczem HTTP. Podobnie jak w przypadku usługi App Service, do tworzenia zmiennych środowiskowych dla kodu są używane ustawienia aplikacji funkcji .
Jedną z implementacji, która staje się łatwiejsza, jest uwierzytelnianie za pomocą usługi Queue Storage. Zamiast uzyskiwać obiekt QueueClient przy użyciu adresu URL kolejki i obiektu poświadczeń, należy utworzyć powiązanie magazynu kolejek dla funkcji. Powiązanie obsługuje wszystkie uwierzytelnianie za kulisami. Dzięki takiemu powiązaniu funkcja otrzymuje gotowy do użycia obiekt klienta jako parametr. Aby uzyskać więcej informacji i przykładowy kod, zobacz Connect Azure Functions to Azure Queue Storage.
Następne kroki
W tym samouczku nauczyłeś się, jak aplikacje uwierzytelniają się w innych usługach platformy Azure przy użyciu tożsamości zarządzanej oraz jak aplikacje mogą korzystać z usługi Azure Key Vault do przechowywania wszelkich innych niezbędnych sekretów dla interfejsów API innych firm.
Ten sam wzorzec pokazany w tym miejscu w usłudze Azure Key Vault i usłudze Azure Storage ma zastosowanie do wszystkich innych usług platformy Azure. Kluczowym krokiem jest przypisanie prawidłowej roli aplikacji na stronie tej usługi w witrynie Azure Portal lub za pośrednictwem interfejsu wiersza polecenia platformy Azure. (Zobacz Jak przypisać role platformy Azure). Upewnij się, że zapoznaj się z dokumentacją usługi, aby sprawdzić, czy chcesz skonfigurować inne zasady dostępu.
Należy zawsze pamiętać, że musisz przypisać te same role i zasady dostępu do dowolnego głównego elementu usługi, którego używasz do lokalnego rozwijania.
Krótko mówiąc, po ukończeniu tego przewodnika możesz zastosować swoją wiedzę do dowolnej liczby innych usług platformy Azure i dowolnej liczby innych usług zewnętrznych.
Jednym z tematów, których nie omówiliśmy w tym samouczku, jest uwierzytelnianie użytkowników . Aby zapoznać się z tym obszarem dla aplikacji internetowych, zacznij od Uwierzytelnianie i autoryzowanie użytkowników końcowych w usłudze Azure App Service.