Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Előző rész: Fő alkalmazás indítási kódja
Az alkalmazás URL-címe /api/v1/getcode az API-hoz létrehoz egy JSON-választ, amely alfanumerikus kódot és időbélyeget tartalmaz.
Először a @app.route dekoratőr tájékoztatja a Flaskot, hogy a get_code függvény kezeli az /api/v1/getcode URL-címére irányuló kérelmeket.
@app.route('/api/v1/getcode', methods=['GET'])
def get_code():
Ezután az alkalmazás meghívja a harmadik féltől származó API-t, amelynek URL-címe number_urltalálható, és megadja a fejléc kulcstartójából lekért hozzáférési kulcsot.
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
A példa harmadik féltől származó API az Azure Functions kiszolgáló nélküli környezetében van üzembe helyezve. A fejléc x-functions-key tulajdonsága az, ahogyan az Azure Functions elvárja, hogy egy hozzáférési kulcs megjelenjen a fejlécben. További információ: Azure Functions HTTP-eseményindító – Engedélyezési kulcsok. Ha az API meghívása bármilyen okból meghiúsul, a kód hibaüzenetet és állapotkódot ad vissza.
Feltételezve, hogy az API-hívás sikeres, és numerikus értéket ad vissza, az alkalmazás összetettebb kódot hoz létre ezzel a számmal és néhány véletlenszerű karakterrel (saját random_char függvény használatával).
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()) }
Az code változó az alkalmazás API-jának teljes JSON-válaszát tartalmazza, amely tartalmazza a kód értékét és az időbélyeget. Példaként {"code":"ojE-161-pTv","timestamp":"2020-04-15 16:54:48.816549"}választ adnánk.
Mielőtt azonban visszaadja ezt a választ, egy üzenetet ír a tárolási üzenetsorba a Queue-ügyfél send_message metódusával:
queue_client.send_message(code)
return jsonify(code)
Üzenetsor feldolgozása
Az üzenetsorban tárolt üzenetek megtekinthetők és kezelhetők az Azure Portalon, az Azure CLI paranccsal az storage message get vagy az Azure Storage Explorerrel. A mintaadattár tartalmaz egy szkriptet (test.cmd és test.sh), amely kódot kér le az alkalmazásvégpontról, majd ellenőrzi az üzenetsort. Létezik egy szkript is, amellyel törölheti az üzenetsort a az storage message clear paranccsal.
Az ebben a példában szereplő alkalmazáshoz hasonló alkalmazásoknak általában van egy másik folyamata, amely aszinkron módon lekéri az üzeneteket az üzenetsorból további feldolgozás céljából. Ahogy korábban említettük, az API-végpont által generált válasz az alkalmazás más részein is használható kéttényezős felhasználói hitelesítéssel. Ebben az esetben az alkalmazásnak érvénytelenítenie kell a kódot egy bizonyos idő elteltével, például 10 perc elteltével. Ennek a feladatnak egy egyszerű módja az érvényes kétfaktoros hitelesítési kódokból álló tábla fenntartása, amelyet a felhasználói bejelentkezési eljárás használ. Az alkalmazás ezután egy egyszerű üzenetsor-figyelő folyamattal rendelkezik a következő logikával (pszeudokódban):
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)
Ez a pszeudokód a send_message metódus opcionális visibility_timeout paraméterét használja, amely megadja, hogy hány másodpercig láthatóvá válik az üzenet az üzenetsorban. Mivel az alapértelmezett időtúllépés nulla, az API-végpont által eredetileg írt üzenetek azonnal láthatók lesznek az üzenetsor-figyelési folyamat számára. Ennek eredményeképpen a folyamat azonnal az érvényes kódtáblában tárolja őket. A folyamat az időtúllépéssel ismét várólistára állítja ugyanazt az üzenetet, így 10 perccel később ismét megkapja a kódot, és ekkor eltávolítja azt a táblából.
A fő alkalmazás API-végpontjának implementálása az Azure Functionsben
A cikkben korábban bemutatott kód a Flask webes keretrendszer használatával hozza létre az API-végpontját. Mivel a Flasknak webkiszolgálóval kell futnia, az ilyen kódot üzembe kell helyezni az Azure App Service-ben vagy egy virtuális gépen.
Alternatív üzembe helyezési lehetőség az Azure Functions kiszolgáló nélküli környezete. Ebben az esetben az összes indítási kód és az API-végpontkód ugyanabban a függvényben található, amely egy HTTP-eseményindítóhoz van kötve. Az App Service-hez hasonlóan függvényalkalmazás beállításaival környezeti változókat hozhat létre a kódhoz.
A megvalósítás egyik egyszerűbb része a Queue Storage hitelesítése. Ahelyett, hogy egy QueueClient objektumot szerez be az üzenetsor URL-címével és egy hitelesítési objektummal, létrehoz egy üzenetsor-tároló kötést a függvényhez. A kötés kezeli az összes hitelesítést a színfalak mögött. Ilyen kötés esetén a függvény paraméterként egy használatra kész ügyfélobjektumot kap. További információ és példakód: Azure Functions csatlakoztatása az Azure Queue Storage.
Következő lépések
Ebből az oktatóanyagból megismerhette, hogyan hitelesíthetők az alkalmazások más Azure-szolgáltatásokkal felügyelt identitással, és hogyan tárolhatják az alkalmazások az Azure Key Vaultot a külső API-khoz szükséges titkos kulcsok tárolására.
Az Azure Key Vault és az Azure Storage esetében itt bemutatott minta az összes többi Azure-szolgáltatásra vonatkozik. A legfontosabb lépés, hogy a megfelelő szerepkört rendelje hozzá az alkalmazáshoz az adott szolgáltatás oldalán az Azure Portalon vagy az Azure CLI-n keresztül. (Lásd: Azure-szerepkörök hozzárendelése). Ellenőrizze a szolgáltatás dokumentációját, hogy konfigurálnia kell-e más hozzáférési szabályzatokat.
Ne feledje, hogy ugyanazokat a szerepköröket és hozzáférési szabályzatokat kell hozzárendelnie minden olyan szolgáltatásnévhez, amelyet helyi fejlesztéshez használ.
Röviden, az útmutató elvégzése után a tudását bármilyen számú más Azure-szolgáltatásra és bármilyen más külső szolgáltatásra alkalmazhatja.
Az oktatóanyag nem foglalkozik a felhasználók hitelesítésével. Kezdje a felhasználók végponttól végpontig történő hitelesítésével és engedélyezésével az Azure App Service-ben a webalkalmazások ezen területének megismeréséhez.