Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Vorheriger Teil: Hauptstartcode der App
Der App-URL-Pfad /api/v1/getcode für die API generiert eine JSON-Antwort, die einen alphanumerischen Code und einen Zeitstempel enthält.
Zuerst teilt der @app.route Dekorateur Flask mit, dass die get_code Funktion Anforderungen an die URL "/api/v1/getcode " verarbeitet.
@app.route('/api/v1/getcode', methods=['GET'])
def get_code():
Als Nächstes ruft die App die Drittanbieter-API auf, deren URL in number_url enthalten ist, und verwendet den Zugriffsschlüssel, den sie im Header aus dem Schlüsseltresor abruft.
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
Die Beispiel-DRITTANBIETER-API wird in der serverlosen Umgebung von Azure Functions bereitgestellt. Die x-functions-key Eigenschaft im Header ist, wie Azure Functions erwartet, dass eine Zugriffstaste in einem Header angezeigt wird. Weitere Informationen finden Sie unter Azure Functions HTTP-Trigger – Autorisierungsschlüssel. Wenn der Aufruf der API aus irgendeinem Grund fehlschlägt, gibt der Code eine Fehlermeldung und den Statuscode zurück.
Wenn der API-Aufruf erfolgreich ist und einen numerischen Wert zurückgibt, erstellt die App dann einen komplexeren Code mit dieser Zahl plus einige zufällige Zeichen (mit einer eigenen random_char Funktion).
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()) }
Die code Variable enthält hier die vollständige JSON-Antwort für die APP-API, die den Codewert und einen Zeitstempel enthält. Eine Beispielantwort wäre {"code":"ojE-161-pTv","timestamp":"2020-04-15 16:54:48.816549"}.
Bevor sie diese Antwort zurückgibt, schreibt sie jedoch eine Nachricht in der Speicherwarteschlange mithilfe der Methode des Warteschlangenclients send_message :
queue_client.send_message(code)
return jsonify(code)
Verarbeiten von Warteschlangennachrichten
Nachrichten, die in der Warteschlange gespeichert sind, können über das Azure-Portal mit dem Azure CLI-Befehl az storage message get oder mit Dem Azure Storage-Explorer angezeigt und verwaltet werden. Das Beispielrepository enthält ein Skript (test.cmd und test.sh), um einen Code vom App-Endpunkt anzufordern und dann die Nachrichtenwarteschlange zu überprüfen. Es gibt auch ein Skript, um die Warteschlange mit dem az storage message clear Befehl zu löschen.
In der Regel verfügt eine App wie in diesem Beispiel über einen anderen Prozess, mit dem Nachrichten asynchron aus der Warteschlange zur weiteren Verarbeitung abgerufen werden. Wie bereits erwähnt, kann die von diesem API-Endpunkt generierte Antwort an anderer Stelle in der App mit zweistufiger Benutzerauthentifizierung verwendet werden. In diesem Fall sollte die App den Code nach einem bestimmten Zeitraum, z. B. 10 Minuten, ungültig halten. Eine einfache Möglichkeit, diese Aufgabe zu erledigen, wäre das Verwalten einer Tabelle mit gültigen zweistufigen Authentifizierungscodes, die von der Benutzeranmeldung verwendet werden. Die App hätte dann einen einfachen Prozess zur Warteschlangenbeobachtung mit der folgenden Logik (in Pseudocode):
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)
Dieser Pseudocode verwendet den optionalen send_message Parameter der visibility_timeout Methode, der die Anzahl von Sekunden angibt, bevor die Nachricht in der Warteschlange sichtbar wird. Da das Standardtimeout null ist, werden nachrichten, die anfänglich vom API-Endpunkt geschrieben wurden, sofort für den Warteschlangenbeobachtungsprozess sichtbar. Daher speichert dieser Prozess sie sofort in der gültigen Codetabelle. Der Prozess stellt dieselbe Nachricht erneut mit dem Timeout in die Warteschlange, sodass er den Code erneut 10 Minuten später empfängt, an dem er sie aus der Tabelle entfernt.
Implementieren des wichtigsten App-API-Endpunkts in Azure Functions
Der code, der zuvor in diesem Artikel gezeigt wurde, verwendet das Flask-Webframework, um seinen API-Endpunkt zu erstellen. Da Flask mit einem Webserver ausgeführt werden muss, muss dieser Code in Azure App Service oder auf einem virtuellen Computer bereitgestellt werden.
Eine alternative Bereitstellungsoption ist die serverlose Umgebung von Azure Functions. In diesem Fall würde der gesamte Startcode und der API-Endpunktcode in derselben Funktion enthalten sein, die an einen HTTP-Trigger gebunden ist. Wie bei App Service verwenden Sie Funktionsanwendungseinstellungen , um Umgebungsvariablen für Ihren Code zu erstellen.
Ein Teil der Implementierung, die einfacher wird, ist die Authentifizierung mit Warteschlangenspeicher. Anstatt ein QueueClient Objekt mithilfe der URL der Warteschlange und eines Anmeldeinformationsobjekts abzurufen, erstellen Sie eine Speicherbindung für die Warteschlange für die Funktion. Die Bindung behandelt die gesamte Authentifizierung im Hintergrund. Bei einer solchen Bindung erhält Ihre Funktion ein einsatzbereites Clientobjekt als Parameter. Weitere Informationen und Beispielcode finden Sie unter Verbinden von Azure-Funktionen mit Azure Queue Storage.
Nächste Schritte
In diesem Lernprogramm haben Sie erfahren, wie Apps sich mit anderen Azure-Diensten mithilfe der verwalteten Identität authentifizieren und wie Apps Azure Key Vault verwenden können, um alle anderen erforderlichen Geheimschlüssel für APIs von Drittanbietern zu speichern.
Das gleiche Muster, das hier mit Azure Key Vault und Azure Storage veranschaulicht wird, gilt für alle anderen Azure-Dienste. Der entscheidende Schritt besteht darin, dass Sie die richtige Rolle für die App auf der Seite dieses Diensts im Azure-Portal oder über die Azure CLI zuweisen. (Siehe Wie man Azure-Rollen zuweist). Überprüfen Sie unbedingt die Dienstdokumentation, um festzustellen, ob Sie andere Zugriffsrichtlinien konfigurieren müssen.
Denken Sie immer daran, dass Sie dieselben Rollen und Zugriffsrichtlinien jedem Dienstprinzipal zuweisen müssen, den Sie für die lokale Entwicklung verwenden.
Kurz gesagt, wenn Sie diese exemplarische Vorgehensweise abgeschlossen haben, können Sie Ihr Wissen auf eine beliebige Anzahl anderer Azure-Dienste und eine beliebige Anzahl anderer externer Dienste anwenden.
Ein Thema, das in diesem Lernprogramm nicht behandelt wird, ist die Authentifizierung von Benutzern. Um diesen Bereich für Web-Apps zu erkunden, beginnen Sie mit der Authentifizierung und Autorisierung von Benutzern end-to-End in Azure App Service.