Benutzerdefinierten Konnektor für Microsoft Entra ID-geschützte Azure-Funktions-Apps erstellen

Ein Schlüsselprinzip bei Microsoft Power Apps-Konnektoren, die Microsoft Entra ID zur Authentifizierung verwenden, besteht darin, dass sie den Benutzenden keinen Zugriff auf Daten gewähren, auf die der Benutzende nicht bereits Zugriff hat. Der Grund hierfür ist, dass der API-Aufruf des mit Microsoft Entra ID geschützten Diensts mit der zur Anmeldung beim Konnektor verwendeten Benutzeridentität ausgeführt wird. Daher ist der Zieldienst weiterhin für die Erzwingung der Berechtigungen des authentifizierten Benutzers verantwortlich.

Dieses Tutorial zeigt Ihnen, wie Sie Azure Funktionen verwenden, um eine REST-API zu erstellen, die Microsoft Entra ID-Authentifizierung zu aktivieren und sie dann Power Apps als benutzerdefinierten Konnektor zur Verfügung zu stellen.

Azure-Funktions-Apps mit Visual Studio Code erstellen

Bei den Azure-Funktionen müssen Sie viele Optionen berücksichtigen, darunter Hosting-Optionen, Sprachauswahl und Authoring-Optionen wie die Verwendung von Azure-Portal, Visual Studio Code oder Visual Studio. Für dieses Tutorial werden wir C# und Visual Studio Code verwenden. Um dieses Tutorial abzuschließen, müssen Sie zuerst den Schnellstart: Eine C#-Funktion in Azure mit Visual Studio Code erstellen abschließen. Notieren Sie sich den Namen, den Sie im Schritt Funktions-App in Azure erstellen für Ihre Funktions-App angegeben haben.

Wichtig

Überspringen Sie den Abschnitt Bereinigen der Ressourcen im Schnellstart. Sie benötigen alle erstellten Ressourcen für dieses Tutorial.

Schützen von Azure-Funktions-Apps durch Verwendung von Microsoft Entra ID

  1. Suchen Sie im Azure-Portal nach Ihrer Funktions-App. Wählen Sie den Namen Ihrer Funktions-App in der Liste aus.

    Liste mit Funktions-Apps im Azure-Portal.

  2. Wählen Sie die Registerkarte Plattformfunktionen aus.

    Hervorgehobene Registerkarte „Plattformfunktionen“ auf dem Blatt der Funktions-App im Azure-Portal.

  3. Wählen Sie aus der Gruppe Netzwerk den Link Authentifizierung/Autorisierung aus.

    Hervorgehobener Link „Authentifizierung/Autorisierung“ auf dem Blatt der Funktions-Apps im Azure-Portal.

  4. Auf dem Blatt Authentifizierung/Autorisierung, aktivieren Sie den Umschalter App-Service-Authentifizierung.

    Hervorgehobene Option „Ein“ für den Umschalter „App-Service-Authentifizierung“ in den Authentifizierungseinstellungen der Funktions-App im Azure-Portal.

  5. In der Dropdown-Liste Die auszuführende Aktion, wenn die Anforderung nicht authentifiziert ist ändern Sie den Wert in Mit Azure Active Directory anmelden. Diese Einstellung stellt sicher, dass anonyme Anforderungen an die API nicht zugelassen werden.

    Die hervorgehobene Option „Mit Azure Active Directory anmelden“ in der Dropdownliste „Die auszuführende Aktion, wenn die Anforderung nicht authentifiziert ist“ auf dem Blatt mit den Authentifizierungseinstellungen der Funktions-App.

  6. Als nächstes wählen Sie in der Liste der Authentifizierungsanbieter Azure Active Directory.

    „Azure Active Directory“ hervorgehoben in der Liste der Authentifizierungsanbieter für eine Funktions-App.

  7. Setzen Sie auf dem Blatt Azure Active Directory-Einstellungen die Option Verwaltungsmodus auf Express. Legen Sie die zweite Option unter Verwaltungsmodus auf Neue AD-App erstellen fest.

    Azure Active Directory-Einstellungsblatt für eine Funktions-App im Azure-Portal geöffnet.

    Wichtig

    Kopieren Sie den Wert im Feld App erstellen, und speichern Sie ihn zur späteren Verwendung, bevor Sie fortfahren. Dieser Wert steht für den Namen der Microsoft Entra ID-Anwendung, die Sie zum Schützen der API verwenden. Sie verwenden diesen Wert später beim Konfigurieren des benutzerdefinierten Connectors.

  8. Wählen Sie OK, um Ihre Auswahl zu bestätigen.

  9. Wählen Sie zurück auf dem Blatt Authentifizierung/Autorisierung die Option Speichern aus, um die Authentifizierungs- und Autorisierungseinstellungen der Funktions-App zu aktualisieren.

    Hervorgehobene Schaltfläche „Speichern“ auf dem Blatt „Authentifizierung/Autorisierung“ der Funktions-App im Azure-Portal.

  10. Wählen Sie nach dem Speichern Azure Active Directory im Abschnitt Authentifizierungsanbieter.

    Azure Active Directory-Anbieter.

  11. Wählen Sie die Azure AD-App, und kopieren Sie dann den Wert Client-ID, und fügen Sie ihn irgendwo zur späteren Verwendung ein.

    Seite „Client-ID“.

  12. Vergewissern Sie sich, dass die API korrekt geschützt ist, indem Sie ein neues Browserfenster im privaten Modus öffnen und zur API navigieren. Die URL für Ihre Funktions-App finden Sie im Abschnitt Übersicht auf dem Blatt der Funktions-App. Wenn die Authentifizierungseinstellungen korrekt angewendet wurden, sollten Sie auf die Anmeldeseite für Microsoft Entra ID umgeleitet werden.

    Microsoft Entra ID-Anmeldeseite.

Erstellen eines benutzerdefinierten Connectors für Ihre Azure-Funktions-App

Zum Erstellen eines benutzerdefinierten Konnektors, der die Microsoft Entra ID-Authentifizierung verwendet, müssen Sie eine Microsoft Entra ID-App-Registrierung erstellen, um den benutzerdefinierten Konnektor zu schützen, und delegierten Zugriff auf die durch die Microsoft Entra ID-App-Registrierung geschützte Azure-Funktions-App abzurufen, die im Abschnitt Schützen von Azure-Funktions-Apps mit Microsoft Entra ID erstellen.

Erstellen einer App-Registrierung für Ihren benutzerdefinierten Konnektor in Microsoft Entra ID

Erstellen Sie zunächst eine Microsoft Entra ID-Anwendung für Ihren benutzerdefinierten Konnektor. Dies ist erforderlich, um dem benutzerdefinierten Connector die Berechtigung zum Anrufen Ihrer Azure-Funktions-App zu erteilen.

  1. Navigieren Sie im Azure-Portal zur Seite App-Registrierungen.

    Microsoft Entra ID-Registrierungsseite im Azure-Portal.

  2. Wählen Sie in der Liste der registrierten Anwendungen die Option Neue Registrierung aus.

    Schaltfläche für Neuregistrierung.

  3. Geben Sie einen Namen für Ihre Anwendung ein, wählen Sie die unterstützten Kontotypen und Plattformkonfigurationen (optional) aus, und wählen Sie dann Registrieren aus.

    Wählen Sie unter „Unterstützte Kontotypen“ die Option „Konten nur in diesem Organisationsverzeichnis“ aus. Wählen Sie unter „Plattformkonfiguration“ die Option „Web-API“ aus.

    Hinweis

    Um mehr über die App-Registrierungsoptionen zu erfahren, gehen Sie zu Schnellstart: Eine Anwendung bei der Microsoft Identity Platform registrieren.

  4. Nachdem Sie Registrieren ausgewählt haben, werden API-Berechtigungen für Ihre App-Registrierung angezeigt.

    Bildschirm „API-Berechtigungen“.

  5. Wählen Sie Berechtigung hinzufügen aus.

    Schaltfläche „Berechtigung hinzufügen“.

  6. Wählen Sie die Registerkarte Von meiner Organisation verwendete APIs aus, und suchen Sie dann nach dem Namen der App aus Schritt 7 des Abschnitts Schützen von Azure-Funktions-Apps mit Microsoft Entra ID. Wählen Sie den Namen der App aus, wenn Sie ihn gefunden haben.

    Wichtig

    Ihr App-Name unterscheidet sich von dem im Screenshot.

    Name der Azure-Funktions-App.

  7. Aktivieren Sie das Kontrollkästchen user_impersonation, und wählen Sie dann Berechtigungen hinzufügen aus.

    Hinzufügen der Berechtigung „user_impersonation“.

    Hinweis

    Weitere Informationen zu Berechtigungen finden Sie unter Berechtigungen und Zustimmung im Microsoft Identity Platform-Endpunkt.

  8. Wählen Sie Zertifikate und Geheimnisse und dann Neuer geheimer Clientschlüssel aus.

    Zertifikate & Geheimnisse.

  9. Geben Sie eine Beschreibung für Ihr Geheimnis ein, wählen Sie ein Ablaufdatum aus, und klicken Sie dann auf Hinzufügen.

    Hinzufügen eines geheimen Clientschlüssels.

  10. Ihr neues Geheimnis wird angezeigt. Kopieren Sie den Wert, und speichern Sie ihn. Sie werden ihn später benötigen.

    Screenshot, der das neue Geheimnis im Abschnitt „Clientgeheimnisse“ zeigt.

  11. Wählen Sie Übersicht aus, und kopieren Sie dann den Wert der Anwendungs-ID (Client), und speichern Sie ihn. Sie werden ihn später benötigen.

    Screenshot, der den ID-Wert der Anwendung (Client) zeigt.

Lassen Sie diese Seite geöffnet. Es gibt noch einen weiteren Schritt im Azure-Portal, aber zuerst erstellen Sie einen benutzerdefinierten Konnektor.

Einen benutzerdefinierten Connector erstellen

Nun, da die Microsoft Entra ID-Anwendung konfiguriert ist, erstellen Sie den benutzerdefinierten Konnektor. Um einen benutzerdefinierten Konnektor zu erstellen, müssen Sie die API beschreiben, mit der Sie eine Verbindung herstellen möchten, damit der Konnektor die Operationen und Datenstrukturen der API versteht. Die Erstellung von Azure-Funktions-Apps für benutzerdefinierte Konnektoren erfordert oft, dass Sie Ihren Konnektor durch Wiederholen der folgenden Schritte iterativ erstellen:

  1. Erstellen, testen und debuggen Sie die Azure-Funktions-App lokal mit Visual Studio Code.
  2. Stellen Sie die Funktions-App in Azure bereit.
  3. Aktualisieren Sie die Konfiguration des benutzerdefinierten Connectors, um Änderungen an Ihrer Funktions-App widerzuspiegeln.

Postman ist ein beliebtes Tool zum Testen von Web-APIs. Es wird häufig verwendet, um Azure-Funktions-Apps zu testen. In diesem Artikel erstellen Sie einen benutzerdefinierten Konnektor auf der Grundlage einer Postman-Sammlung. Die Postman-Sammlung wird für Sie bereitgestellt.

Hinweis

Weitere Informationen zum Erstellen einer eigenen Postman-Sammlung finden Sie im Thema Eine Postman-Sammlung für einen benutzerdefinierten Konnektor erstellen. Die Verwendung von Postman ist nur eine Option zum Erstellen eines benutzerdefinierten Connectors. Wechseln Sie zum Thema API beschreiben und benutzerdefinierten Konnektor definieren, um mehr zu anderen zu erfahren.

  1. In einer neuen Browser-Registerkarte melden Sie sich bei Power Apps oder Power Automate an.

  2. Kopieren Sie den folgenden Code. Erstellen Sie mit Ihrem bevorzugten Text-Editor eine neue Datei, und fügen Sie den Code als Inhalt der Datei ein. Speichern Sie die Datei. Sie können einen beliebigen Namen für die Datei verwenden (z. B. tutorial-custom-connector.json). Denken Sie aber daran, sich den Namen zu merken. Sie benötigen diese Datei in den nächsten Schritten.

    {
        "id": "c4b5deba-f97b-47d0-82a5-a2b32561fb01",
        "name": "Custom Connector",
        "description": null,
        "auth": null,
        "events": null,
        "variables": [],
        "order": [
            "374365a1-ede5-4ead-8068-d878085dad26"
        ],
        "folders_order": [],
        "protocolProfileBehavior": {},
        "folders": [],
        "requests": [
            {
                "id": "374365a1-ede5-4ead-8068-d878085dad26",
                "name": "Hello",
                "url": "http://localhost:7071/api/Hello",
                "description": "",
                "data": [],
                "dataOptions": {
                    "raw": {
                        "language": "json"
                    }
                },
                "dataMode": "raw",
                "headerData": [
                    {
                        "key": "Content-Type",
                        "name": "Content-Type",
                        "value": "application/json",
                        "description": "",
                        "type": "text"
                    }
                ],
                "method": "POST",
                "pathVariableData": [],
                "queryParams": [],
                "auth": null,
                "events": null,
                "folder": null,
                "responses": [
                    {
                        "id": "46baba58-7b85-4a2e-8c7d-303080e08ba9",
                        "name": "Hello",
                        "status": null,
                        "mime": null,
                        "language": "plain",
                        "text": "Hello, Marc. This HTTP triggered function executed successfully.",
                        "responseCode": {
                            "code": 200,
                            "name": "OK"
                        },
                        "requestObject": {
                            "data": [],
                            "dataMode": "raw",
                            "dataOptions": {
                                "raw": {
                                    "language": "json"
                                }
                            },
                            "headerData": [
                                {
                                    "key": "Content-Type",
                                    "name": "Content-Type",
                                    "value": "application/json",
                                    "description": "",
                                    "type": "text"
                                }
                            ],
                            "method": "POST",
                            "pathVariableData": [],
                            "queryParams": [],
                            "url": "http://localhost:7071/api/Hello",
                            "rawModeData": "{\n\t\"name\": \"Marc\"\n}"
                        },
                        "headers": [
                            {
                                "key": "Date",
                                "value": "Wed, 04 Mar 2020 22:32:06 GMT"
                            },
                            {
                                "key": "Content-Type",
                                "value": "text/plain; charset=utf-8"
                            },
                            {
                                "key": "Server",
                                "value": "Kestrel"
                            },
                            {
                                "key": "Transfer-Encoding",
                                "value": "chunked"
                            }
                        ],
                        "cookies": null,
                        "request": "374365a1-ede5-4ead-8068-d878085dad26",
                        "collection": "c4b5deba-f97b-47d0-82a5-a2b32561fb01"
                    }
                ],
                "rawModeData": "{\n\t\"name\": \"Marc\"\n}",
                "headers": "Content-Type: application/json\n",
                "pathVariables": {}
            }
        ]
    }
    
  3. Erweitern Sie im linken Bereich Daten, und wählen Sie dann Benutzerdefinierte Connectors aus.

    Screenshot, der Daten und benutzerdefinierte Connectors im linken Bereich zeigt.

  4. Wählen Sie in der oberen rechten Ecke Neuer benutzerdefinierter Connector und dann Postman-Sammlung importieren aus.

    Eine Postman-Sammlung importieren.

  5. Geben Sie einen Namen für den Connector ein, wählen Sie Importieren aus, navigieren Sie zu der Datei, die Sie in Schritt 2 erstellt haben, und wählen Sie dann Weiter aus.

    Name und Speicherort der Datei.

  6. Die Seite Allgemein wird geöffnet. Ändern Sie das Schema in HTTPS, ersetzen Sie den Wert von Host durch die Domäne ihrer Funktions-App, und fahren Sie dann mit der Seite Sicherheit des Assistenten fort.

    Einstellungen auf der Seite „Allgemeine Informationen“.

  7. Geben Sie auf der Seite Sicherheit Microsoft Entra ID-Informationen für die Anwendung an:

    OAuth-Einstellungen.

    Nachdem Sie die Sicherheitsinformationen eingegeben haben, wählen Sie Connector aktualisieren aus, um den benutzerdefinierten Connector zu erstellen.

  8. Auf der Seite Sicherheit ist das Feld Redirect-URL jetzt ausgefüllt. Kopieren Sie diese URL, weil Sie sie im nächsten Abschnitt dieses Tutorials verwenden können.

    Hinweis

    Sie müssen möglicherweise nach unten scrollen, um die Umleitungs-URL zu sehen.

    Screenshot, der das Feld „Umleitungs-URL“ zeigt.

  9. Kehren Sie auf einer anderen Browserregisterkarte zu der App-Registrierung zurück, die Sie im Abschnitt Erstellen einer App-Registrierung für Ihren benutzerdefinierten Connector in Microsoft Entra ID erstellt haben. Vergewissern Sie sich, dass Sie sich im Abschnitt Übersicht befinden, und wählen Sie dann Umleitungs-URI hinzufügen aus.

    Screenshot, der die Schaltfläche „Umleitungs-URL hinzufügen“ zeigt.

  10. Wählen Sie Plattform hinzufügen aus.

    Schaltfläche „Plattform hinzufügen“.

  11. Wählen Sie im Bereich Plattformen konfigurieren die Option Web aus.

    Screenshot, der „Web“ im Bereich „Plattformen konfigurieren“ zeigt.

  12. Fügen Sie im Bereich Web konfigurieren den Wert der Umleitungs-URL aus Schritt 7 ein, und wählen Sie dann Konfigurieren aus.

    Screenshot, der den Bereich „Web konfigurieren“ zeigt.

  13. Kehren Sie zur Browserregisterkarte mit der Konfiguration des benutzerdefinierten Connectors zurück. Es sollte noch immer die Seite Sicherheit des Assistenten geöffnet sein.

  14. Wählen Sie das Wort Definition aus, um mit der Seite Definition des Assistenten fortzufahren, und überprüfen Sie die Angaben.

    Screenshot, der die Schaltfläche „Definition“ zeigt.

    Hinweis

    Die Definition stammt aus der Postman-Sammlung, die Sie importiert haben. Wenn Sie den Code in Schnellstart: Eine C#-Funktion in Azure mit Visual Studio Code erstellen geändert haben, stimmt die Importdatei möglicherweise nicht mit der Form Ihrer API überein. Sie müssen entweder eine neue Postman-Sammlung erstellen oder die Aktion manuell im benutzerdefinierten Connector anpassen. Informationen zum Erstellen einer neuen Postman-Sammlung finden Sie hier unter den Links weiter oben in diesem Tutorial. Informationen zum manuellen Anpassen der Aktion finden Sie im Tutorial Erstellen eines benutzerdefinierten Connectors ohne Vorlage im Abschnitt unter Erstellen der Connectordefinition.

Connector testen

Nun, da Sie den Konnektor erstellt haben, testen Sie ihn, um sicherzustellen, dass er ordnungsgemäß funktioniert. Tests sind derzeit nur in Power Automate und Power Apps verfügbar.

  1. Wählen Sie Test aus, um mit der Seite Test des Assistenten fortzufahren.

    Testseite.

  2. Wählen Sie auf der Seite Test die Option Neue Verbindung aus.

    Screenshot, der die Schaltfläche „Neue Verbindung“ zeigt.

  3. Wählen Sie Erstellen aus, und melden Sie sich dann mit Ihrem Microsoft Entra ID-Benutzenden an.

    Screenshot, der die Schaltfläche „Erstellen“ und den Anmeldebildschirm zeigt.

  4. Gehen Sie zur Seite Test und führen Sie einen der folgenden Schritte aus:

    • Unter Power Automate gelangen Sie zurück zur Seite Test. Wählen Sie das Aktualisierungssymbol, um sicherzustellen, dass die Verbindungsinformationen aktualisiert werden.

      Verbindung aktualisieren.

    • Unter Power Apps gelangen Sie zu der Liste der in der aktuellen Umgebung verfügbaren Verbindungen. Wählen Sie im linken Bereich Benutzerdefinierte Connectors aus. Suchen Sie nach Ihrem benutzerdefinierten Connector, und wählen Sie dann das Bearbeitungssymbol aus.

      Screenshot mit der Liste der benutzerdefinierten Connectors.

  5. Kehren Sie zur Seite Test zurück, geben Sie einen Wert in das Feld Name ein, und wählen Sie dann Vorgang testen aus.

    Vorgang testen.

  6. Überprüfen Sie die Anforderung und die Antwort.

    Screenshot, der die Anforderungsfelder für URL, Methode, Header und Body zeigt.

    Screenshot, der die Antwortfelder für Status, Header und Body zeigt.

Nächste Schritte,

Nun, da Sie einen benutzerdefinierten Konnektor erstellt und sein Verhalten definiert haben, können Sie den Konnektor verwenden.

Feedback senden

Wir freuen uns sehr über Feedback zu Problemen mit unserer Connector-Plattform oder neuen Feature-Ideen. Wenn Sie Feedback geben möchten, gehen Sie zu Probleme melden oder Hilfe zu Connectors und wählen Sie einen Feedbacktyp aus.