Freigeben über


Konfigurieren eines benutzerdefinierten E-Mail-Anbieters für Sendeereignisse einmaliger Passcodes (Vorschau)

Gilt für: Weißer Kreis mit grauem X. Mitarbeitermandanten Grüner Kreis mit weißem Häkchen. Externe Mandanten (weitere Informationen)

Dieser Artikel bietet eine Führungslinie zur Konfiguration und Einrichtung eines benutzerdefinierten E-Mail-Anbieters für den Ereignistyp „Einmalige Kennung senden“. Das Ereignis wird ausgelöst, wenn eine OTP-E-Mail aktiviert wird. Es ermöglicht Ihnen, eine REST-API aufzurufen, um Ihren eigenen E-Mail-Anbieter zu nutzen, indem Sie eine REST-API aufrufen.

Schauen Sie sich dieses Video an, um zu erfahren, wie Sie Überprüfungs-E-Mails mit benutzerdefinierten Authentifizierungserweiterungen von Microsoft Entra mithilfe einer Web-API basierend auf Azure Logic Apps anpassen. Logik-App ermöglicht Benutzern das Erstellen von Workflows über einen visuellen Designer.

Voraussetzungen

Schritt 1: Erstellen einer Azure Functions-App

Dieser Abschnitt zeigt Ihnen, wie Sie eine Azure-Funktions-App im Azure-Portal einrichten. Die Funktion-API ist das Gateway zu Ihrem E-Mail-Anbieter. Sie erstellen eine Azure-Funktions-App, um die HTTP-Triggerfunktion zu hosten und die Einstellungen in der Funktion zu konfigurieren.

Tipp

Die Schritte in diesem Artikel können je nach dem Portal, mit dem Sie beginnen, geringfügig variieren.

  1. Melden Sie sich beim Azure-Portal mindestens mit der Rolle Anwendungsadministrator und Authentifizierungsadministrator an.

  2. Klicken Sie im Menü des Azure-Portals oder auf der Startseite auf Ressource erstellen.

  3. Suchen Sie nach Funktions-App, und wählen Sie diese Option und dann Erstellen aus.

  4. Auf der Funktions-App erstellen-Seite aktivieren Sie Verbrauch und dann Auswählen.

  5. Auf der Seite Funktions-App (Verbrauch) erstellen, in der Registerkarte Allgemeine Informationen, erstellen Sie eine Funktions-App mit den Einstellungen, die in der folgenden Tabelle angegeben sind:

    Einstellung Vorgeschlagener Wert Beschreibung
    Abonnement Ihr Abonnement Das Abonnement, unter dem die neue Funktions-App erstellt wird.
    Ressourcengruppe myResourceGroup Aktivieren Sie die Ressourcengruppe, die verwendet wird, um die Azure-Kommunikationsdienst und E-Mail-Kommunikationsdienst Ressourcen als Teil der Voraussetzungen einzurichten
    Funktions-App-Name Global eindeutiger Name Ein Name, der die neue Funktions-App identifiziert. Gültige Zeichen sind a-z (Groß-/Kleinschreibung nicht beachtet), 0-9 und -.
    Code oder Containerimage bereitstellen Code Option zum Veröffentlichen von Codedateien oder eines Docker-Containers. In diesem Tutorial wählen Sie Code aus.
    Runtime-Stapel .NET Ihre bevorzugte Programmiersprache. In diesem Tutorial wählen Sie .NET aus.
    Version 8 (LTS) In-Process Die Version der .NET-Runtime. In-Process bedeutet, dass Sie Funktionen im Portal erstellen und ändern können. Dies wird für diesen Leitfaden empfohlen.
    Region Bevorzugte Region Wählen Sie eine Region in Ihrer Nähe oder in der Nähe anderer Dienste aus, auf die Ihre Funktionen zugreifen können.
    Betriebssystem Fenster Das Betriebssystem wird für Sie basierend auf der Auswahl des Runtimestapels vorab ausgewählt.
  6. Wählen Sie Überprüfen und erstellen aus, um die ausgewählte App-Konfiguration zu überprüfen, und wählen Sie dann Erstellen aus. Die Bereitstellung nimmt einige Minuten in Anspruch.

  7. Wählen Sie nach der Bereitstellung Zu Ressource wechseln aus, um Ihre neue Funktions-App anzuzeigen.

1.1 Erstellen einer HTTP-Triggerfunktion

Nachdem die Azure-Funktions-App erstellt wurde, können Sie eine HTTP-Triggerfunktion erstellen. Mit dem HTTP-Trigger können Sie eine Funktion mit einer HTTP-Anforderung aufrufen. Ihre benutzerdefinierte Microsoft Entra Authentifizierungserweiterung verknüpft sich mit dieser HTTP-Triggerfunktion.

  1. Wählen Sie in Ihrer Funktions-App im Menü die Option Funktionen aus.
  2. Wählen Sie Funktion erstellen aus.
  3. Im Create Function Fenster, unter Vorlage auswählen, suchen Sie nach und aktivieren Sie die HTTP-Trigger Vorlage. Wählen Sie Weiter aus.
  4. Unter „Vorlage-Details“ geben Sie „CustomAuthenticationExtensionsAPI“ für die „Eigenschaftenname“-Eigenschaft ein.
  5. Wählen Sie für die Autorisierungsstufe die Option Funktion aus.
  6. Wählen Sie Erstellen aus.

1.2 Bearbeiten der Funktion

Der Code beginnt mit dem Lesen des eingehenden JSON-Objekts. Microsoft Entra ID sendet das JSON-Objekt an Ihre API. In diesem Beispiel liest es die E-Mail-Adresse (Bezeichner) und das OTP. Dann sendet der Code die Details an den Kommunikationsdienst, um die E-Mail mit einer „dynamischen Vorlage“ zu senden.

Diese Schrittanleitung demonstriert das OTP-Sendeereignis unter Verwendung von Azure-Kommunikationsdiensten und SendGrid. Verwenden Sie die Registerkarten, um Ihre Implementierung auszuwählen.

  1. Wählen Sie im Menü die Option Programmieren und testen aus.

  2. Ersetzen Sie den gesamten Code durch den folgenden Codeausschnitt.

    using System.Dynamic;
    using System.Text.Json;
    using System.Text.Json.Nodes;
    using System.Text.Json.Serialization;
    using Azure.Communication.Email;
    using Microsoft.AspNetCore.Http;
    using Microsoft.AspNetCore.Http.HttpResults;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Azure.Functions.Worker;
    using Microsoft.Extensions.Logging;
    
    namespace Company.AuthEvents.OnOtpSend.CustomEmailACS
    {
        public class CustomEmailACS
        {
            private readonly ILogger<CustomEmailACS> _logger;
    
            public CustomEmailACS(ILogger<CustomEmailACS> logger)
            {
                _logger = logger;
            }
    
            [Function("OnOtpSend_CustomEmailACS")]
            public async Task<IActionResult> RunAsync([HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequest req)
            {
                _logger.LogInformation("C# HTTP trigger function processed a request.");
    
                // Get the request body
                string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
                JsonNode jsonPayload = JsonNode.Parse(requestBody)!;
    
                // Get OTP and mail to
                string emailTo = jsonPayload["data"]!["otpContext"]!["identifier"]!.ToString();
                string otp = jsonPayload["data"]!["otpContext"]!["onetimecode"]!.ToString();
    
                // Send email
                await SendEmailAsync(emailTo, otp);
    
                // Prepare response
                ResponseObject responseData = new ResponseObject("microsoft.graph.OnOtpSendResponseData");
                responseData.Data.Actions = new List<ResponseAction>() { new ResponseAction(
                    "microsoft.graph.OtpSend.continueWithDefaultBehavior") };
    
                return new OkObjectResult(responseData);
            }
    
            private async Task SendEmailAsync(string emailTo, string code)
            {
                // Get app settings
                var connectionString = Environment.GetEnvironmentVariable("mail_connectionString");
                var sender = Environment.GetEnvironmentVariable("mail_sender");
                var subject = Environment.GetEnvironmentVariable("mail_subject");
    
                try
                {
                    if (!string.IsNullOrEmpty(connectionString))
                    {
                        var emailClient = new EmailClient(connectionString);
                        var body = EmailTemplate.GenerateBody(code);
    
                        _logger.LogInformation($"Sending OTP to {emailTo}");
    
                        EmailSendOperation emailSendOperation = await emailClient.SendAsync(
                        Azure.WaitUntil.Started,
                        sender,
                        emailTo,
                        subject,
                        body);
                    }
                }
                catch (System.Exception ex)
                {
                    _logger.LogError(ex.Message);
                }
            }
        }
    
        public class ResponseObject
        {
            [JsonPropertyName("data")]
            public Data Data { get; set; }
    
            public ResponseObject(string dataType)
            {
                Data = new Data(dataType);
            }
        }
    
        public class Data
        {
            [JsonPropertyName("@odata.type")]
            public string DataType { get; set; }
            [JsonPropertyName("actions")]
            public List<ResponseAction> Actions { get; set; }
    
            public Data(string dataType)
            {
                DataType = dataType;
            }
        }
    
        public class ResponseAction
        {
            [JsonPropertyName("@odata.type")]
            public string DataType { get; set; }
    
            public ResponseAction(string dataType)
            {
                DataType = dataType;
            }
        }
    
        public class EmailTemplate
        {
            public static string GenerateBody(string oneTimeCode)
            {
                return @$"<html><body>
                <div style='background-color: #1F6402!important; padding: 15px'>
                    <table>
                    <tbody>
                        <tr>
                            <td colspan='2' style='padding: 0px;font-family: "Segoe UI Semibold", "Segoe UI Bold", "Segoe UI", "Helvetica Neue Medium", Arial, sans-serif;font-size: 17px;color: white;'>Woodgrove Groceries live demo</td>
                        </tr>
                        <tr>
                            <td colspan='2' style='padding: 15px 0px 0px;font-family: "Segoe UI Light", "Segoe UI", "Helvetica Neue Medium", Arial, sans-serif;font-size: 35px;color: white;'>Your Woodgrove verification code</td>
                        </tr>
                        <tr>
                            <td colspan='2' style='padding: 25px 0px 0px;font-family: "Segoe UI", Tahoma, Verdana, Arial, sans-serif;font-size: 14px;color: white;'> To access <span style='font-family: "Segoe UI Bold", "Segoe UI Semibold", "Segoe UI", "Helvetica Neue Medium", Arial, sans-serif; font-size: 14px; font-weight: bold; color: white;'>Woodgrove Groceries</span>'s app, please copy and enter the code below into the sign-up or sign-in page. This code is valid for 30 minutes. </td>
                        </tr>
                        <tr>
                            <td colspan='2' style='padding: 25px 0px 0px;font-family: "Segoe UI", Tahoma, Verdana, Arial, sans-serif;font-size: 14px;color: white;'>Your account verification code:</td>
                        </tr>
                        <tr>
                            <td style='padding: 0px;font-family: "Segoe UI Bold", "Segoe UI Semibold", "Segoe UI", "Helvetica Neue Medium", Arial, sans-serif;font-size: 25px;font-weight: bold;color: white;padding-top: 5px;'>
                            {oneTimeCode}</td>
                            <td rowspan='3' style='text-align: center;'>
                                <img src='https://woodgrovedemo.com/custom-email/shopping.png' style='border-radius: 50%; width: 100px'>
                            </td>
                        </tr>
                        <tr>
                            <td style='padding: 25px 0px 0px;font-family: "Segoe UI", Tahoma, Verdana, Arial, sans-serif;font-size: 14px;color: white;'> If you didn't request a code, you can ignore this email. </td>
                        </tr>
                        <tr>
                            <td style='padding: 25px 0px 0px;font-family: "Segoe UI", Tahoma, Verdana, Arial, sans-serif;font-size: 14px;color: white;'> Best regards, </td>
                        </tr>
                        <tr>
                            <td>
                                <img src='https://woodgrovedemo.com/Company-branding/headerlogo.png' height='20'>
                            </td>
                            <td style='font-family: "Segoe UI", Tahoma, Verdana, Arial, sans-serif;font-size: 14px;color: white; text-align: center;'>
                                <a href='https://woodgrovedemo.com/Privacy' style='color: white; text-decoration: none;'>Privacy Statement</a>
                            </td>
                        </tr>
                    </tbody>
                    </table>
                </div>
                </body></html>";
            }
        }
    }
    
  3. Aktivieren Sie Get Function Url und kopieren Sie die Funktionstaste URL, die fortan verwendet und als {Function_Url} bezeichnet wird. Schließen Sie die Funktion.

Schritt 2: Verbindungszeichenfolgen zu den Azure Functions hinzufügen

Verbindungszeichenfolgen aktivieren Ihre Funktions-App, um sich mit dem E-Mail-Relay-Dienst zu verbinden und zu authentifizieren. Fügen Sie diese Verbindungszeichenfolgen sowohl für Azure-Kommunikationsdienste als auch für SendGrid als Umgebungsvariablen zu Ihrer Azure Functions-App hinzu.

2.1 Extrahieren Sie die Verbindungszeichenfolgen und Dienstendpunkte aus Ihrer Azure-Kommunikationsdienst-Ressource

Sie können auf die Communication Services-Verbindungszeichenfolgen und -Dienstendpunkte über das Azure-Portal oder programmgesteuert mit Azure Resource Manager-APIs zugreifen.

  1. Von der Startseiteim Azure-Portal öffnen Sie das Portalmenü, suchen Sie nach und aktivieren Sie Alle Ressourcen.

  2. Suche und aktivieren Sie den Azure-Kommunikationsdienst, der als Teil der Voraussetzungen zu diesem Artikel erstellt wurde.

  3. Im linken Bereich aktivieren Sie das Einstellungen Dropdownmenü, dann aktivieren Sie Schlüssel.

  4. Kopieren Sie den Endpunkt und aus dem Primärschlüssel kopieren Sie die Werte für den Schlüssel und die Verbindungszeichenfolge.

    Screenshot der Seite mit den Azure-Kommunikationsdienst-Schlüsseln, die die Speicherorte des Azure-Endpunkts und der Schlüssel zeigt.

2.2 Fügen Sie die Verbindungszeichenfolgen zu den Azure Functions hinzu

  1. Navigieren Sie zurück zur Azure-Funktion, die Sie in „Azure-Funktions-App erstellen“ erstellt haben.

  2. Von der Übersicht-Seite Ihrer Funktions-App im linken Menü aktivieren Sie Einstellungen>Umgebungsvariablen und fügen Sie die folgenden App-Einstellungen hinzu. Sobald alle Einstellungen hinzugefügt sind, aktivieren Sie anwenden und dann bestätigen.

    Einstellung Wert (Beispiel) Beschreibung
    E-Mail-Verbindungszeichenfolge https://ciamotpcommsrvc.unitedstates.communication.azure.com/:accesskey= Der Azure Communication Services-Endpunkt
    mail_sender from.email@myemailprovider.com Die von E-Mail-Adresse.
    Betreff Ihr Firmenprüfcode Der Betreff der E-Mail.

Schritt 3: Registrieren einer benutzerdefinierten Authentifizierungserweiterung

In diesem Schritt konfigurieren Sie eine benutzerdefinierte Authentifizierungserweiterung, die Microsoft Entra ID verwendet, um Ihre Azure-Funktion aufzurufen. Die benutzerdefinierte Authentifizierungserweiterung enthält Informationen zu Ihrem REST-API-Endpunkt, zu den aus Ihrer REST-API geparsten Ansprüchen sowie zur Authentifizierung bei Ihrer REST-API. Verwenden Sie entweder das Azure-Portal oder Microsoft Graph, um eine Anwendung zu registrieren, damit Ihre benutzerdefinierte Authentifizierungserweiterung Ihre Azure-Funktion authentifizieren kann.

Registrieren einer benutzerdefinierten Authentifizierungserweiterung

  1. Melden Sie sich beim Azure-Portal mindestens mit der Rolle Anwendungsadministrator und Authentifizierungsadministrator an.

  2. Suchen Und wählen Sie Microsoft Entra-ID und Enterprise-Anwendungen aus.

  3. Wählen Sie Benutzerdefinierte Authentifizierungserweiterungen und dann Benutzerdefinierte Erweiterung erstellen aus.

  4. In Allgemeine Informationen aktivieren Sie den EmailOtpSend Ereignistyp und aktivieren Sie Weiter.

    Screenshot des Azure-Portals, der das E-Mail-OTP-Sendeereignis hervorhebt.

  5. In der Endpunktkonfiguration-Registerkarte füllen Sie die folgenden Eigenschaften aus und wählen Sie Weiter aus, um fortzufahren.

    • Name - Ein Name für Ihre benutzerdefinierte Authentifizierungserweiterung. Zum Beispiel, E-Mail-OTP senden.
    • Ziel-URL - Die {Function_Url} Ihrer Azure-Funktions-URL. Navigieren Sie zur Seite Übersicht Ihrer Azure Function-App, und wählen Sie dann die von Ihnen erstellte Funktion aus. Wählen Sie auf der Seite Funktionsübersicht die Option Funktions-URL abrufen aus, und verwenden Sie das Kopiersymbol, um die URL customauthenticationextension_extension (Systemschlüssel) zu kopieren.
    • Beschreibung - Eine Beschreibung für Ihre benutzerdefinierten Authentifizierungserweiterungen.
  6. Aktivieren Sie auf der Registerkarte API-Authentifizierung die Option Neue App-Registrierung erstellen, um eine App-Registrierung zu erstellen, die Ihre Funktions-App zusichert.

  7. Geben Sie der App einen Namen, zum Beispiel „Azure Functions Authentifizierung Ereignisse API“, und aktivieren Sie „Weiter“.

  8. Wählen Sie auf der Registerkarte Anwendungen die Anwendung aus, die Sie mit der benutzerdefinierten Authentifizierungserweiterung zuordnen möchten. Wählen Sie Weiter aus. Sie haben die Möglichkeit, es auf den gesamten Mandanten anzuwenden, indem Sie das Kontrollkästchen aktivieren. Klicken Sie auf Weiter, um fortzufahren.

  9. In der Registerkarte „Überprüfen“ prüfen Sie, ob die Details für die benutzerdefinierte Authentifizierungserweiterung korrekt sind. Beachten Sie die App-ID unter API-Authentifizierung, die zum Konfigurieren der Authentifizierung für Ihre Azure Function in Ihrer Azure Function-App erforderlich ist. Wählen Sie Erstellen aus.

Nachdem Ihre benutzerdefinierte Authentifizierungserweiterung erstellt wurde, öffnen Sie die Anwendung im Portal unter App-Registrierungen und aktivieren Sie API-Berechtigungen.

Von der API-Berechtigungen-Seite aktivieren Sie die Schaltfläche Administratoreinwilligung für „YourTenant“ erteilen, um der registrierten App Administratoreinwilligung zu geben, die es der benutzerdefinierten Authentifizierungserweiterung ermöglicht, sich bei Ihrer API zu authentifizieren. Die benutzerdefinierte Authentifizierungserweiterung verwendet client_credentials für die Authentifizierung bei der Azure-Funktions-App mit der Berechtigung Receive custom authentication extension HTTP requests.

Im folgenden Screenshot wird gezeigt, wie Berechtigungen erteilt werden.

Screenshot des Azure-Portals und wie man die Administratoreinwilligung zuweist.

Schritt 4: Konfigurieren Sie eine OpenID Connect-App zum Testen

Sie können die https://jwt.ms-App verwenden, um ein Token abzurufen und die benutzerdefinierte Authentifizierungserweiterung zu testen. Dabei handelt es sich um eine Microsoft-Webanwendung, die den decodierten Inhalt eines Tokens anzeigt (der Inhalt des Tokens verlässt niemals Ihren Browser).

Führen Sie die folgenden Schritte aus, um die Webanwendung jwt.ms zu registrieren:

4.1. Registrieren einer Testwebanwendung

  1. Melden Sie sich beim Microsoft Entra Admin Center mindestens mit der Rolle Anwendungsadministrator an.
  2. Navigieren Sie zu Entra ID>App-Registrierungen.
  3. Wählen Sie "Neue Registrierung“ aus.
  4. Geben Sie unter Name einen Namen für die Anwendung ein. Beispielsweise „Meine Testanwendung“ oder My Test application.
  5. Wählen Sie unter Unterstützte Kontotypen die Option Nur Konten in diesem Organisationsverzeichnis aus.
  6. Im Dropdown „Plattform auswählen“ im Redirect-URI aktivieren Sie Web und geben Sie dann https://jwt.ms in das URL-Textfeld ein.
  7. Wählen Sie Registrieren aus, um die App-Registrierung abzuschließen.
  8. In Ihrer App-Registrierung, unter Übersicht, kopieren Sie die Anwendung (Client)-ID, die später verwendet und als {App_to_sendotp_ID} bezeichnet wird. In Microsoft Graph wird sie durch die appId-Eigenschaft referenziert.

Im folgenden Screenshot wird gezeigt, wie My Test application (Meine Testanwendung) registriert wird.

Screenshot: Auswählen des unterstützten Kontotyps und des Umleitungs-URIs.

4.1 Abrufen der Anwendungs-ID

Kopieren Sie in Ihrer App-Registrierung unter Übersicht die Anwendungs-ID (Client-ID). Die App-ID wird in späteren Schritten als {App_to_sendotp_ID} bezeichnet. In Microsoft Graph wird sie durch die appId-Eigenschaft referenziert.

4.2 Aktivieren des impliziten Flows

Die Testanwendung jwt.ms verwendet den impliziten Flow. Aktivieren der impliziten Bewegungsart in der My Test Anwendung Anwendungsregistrierung:

Wichtig

Microsoft empfiehlt, den sichersten verfügbaren Authentifizierungs-Flow zu verwenden. Der Authentifizierungsfluss, der in dieser Prozedur zum Testen verwendet wird, erfordert ein hohes Maß an Vertrauen in die Anwendung und birgt Risiken, die in anderen Flows nicht präsent sind. Dieser Ansatz sollte nicht für die Authentifizierung von Benutzern für Ihre Produktiv-Apps verwendet werden (mehr erfahren).

  1. Wählen Sie unter Verwalten die Option Authentifizierung aus.
  2. Aktivieren Sie unter Implizite Genehmigung und Hybridflows das Kontrollkästchen ID-Token (für implizite und Hybridflows verwendet).
  3. Wählen Sie Speichern aus.

Schritt 5: Schützen Ihrer Azure-Funktion

Die benutzerdefinierte Microsoft Entra-Authentifizierungserweiterung verwendet den Server-zu-Server-Flow, um ein Zugriffstoken abzurufen, das im HTTP-Header Authorization an Ihre Azure-Funktion gesendet wird. Wenn Sie Ihre Funktion in Azure – insbesondere in einer Produktionsumgebung – veröffentlichen, müssen Sie das im Autorisierungsheader gesendete Token überprüfen.

Führen Sie zum Schutz Ihrer Azure-Funktion die folgenden Schritte zum Integrieren der Microsoft Entra-Authentifizierung aus, um eingehende Token mit der Azure Functions-Authentifizierungsereignis-API zur Authentifizierungsregistrierung zu überprüfen.

Hinweis

Wenn die Azure-Funktions-App in einem anderen Azure-Mandanten gehostet wird als dem Mandanten, in dem Ihre benutzerdefinierte Authentifizierungserweiterung registriert ist, fahren Sie mit dem Schritt Verwenden des OpenID Connect-Identitätsanbieters fort.

  1. Melden Sie sich beim Azure-Portal an.
  2. Navigieren Sie zu der zuvor veröffentlichten Funktions-App, und wählen Sie diese aus.
  3. Wählen Sie Authentifizierung im Menü auf der linken Seite.
  4. Wählen Sie Identitätsanbieter hinzufügen aus.
  5. Wählen Sie im Dropdownmenü Microsoft als Identitätsanbieter aus.
  6. Unter App-Registrierung->App-Registrierungstyp aktivieren Sie Entnehmen Sie eine vorhandene App-Registrierung in diesem Verzeichnis und entnehmen Sie die Azure Functions-Authentifizierungsereignisse-API App-Registrierung, die Sie zuvor erstellt haben, als Sie den benutzerdefinierten E-Mail-Anbieter registrierten.
  7. Hinzufügen des geheimer Clientschlüssel Ablaufs für die App.
  8. Wählen Sie unter Nicht authentifizierte Anforderungen die Option HTTP 401 (nicht autorisiert): für APIs empfohlen aus.
  9. Deaktivieren Sie die Option Tokenspeicher.
  10. Wählen Sie Hinzufügen aus, um Ihrer Azure-Funktion die Authentifizierung hinzuzufügen.

Screenshot: Hinzufügen von Authentifizierung zu Ihrer Funktions-App.

5.1 Verwenden des OpenID Connect-Identitätsanbieters

Wenn Sie Microsoft als Identitätsanbieter konfiguriert haben, überspringen Sie diesen Schritt. Wird die Azure-Funktion jedoch in einem anderen Mandanten gehostet als dem Mandanten, in dem Ihre benutzerdefinierte Authentifizierungserweiterung registriert ist, führen Sie die folgenden Schritte aus, um Ihre Funktion zu schützen:

  1. Melden Sie sich beim Azure-Portal an, navigieren Sie zu der zuvor veröffentlichten Funktions-App, und wählen Sie diese aus.

  2. Auswählen von Authentifizierung im linken Bereich.

  3. Wählen Sie Identitätsanbieter hinzufügen aus.

  4. Wählen Sie OpenID Connect als Identitätsanbieter aus.

  5. Geben Sie einen Namen an, z. B. Contoso Microsoft Entra ID.

  6. Geben Sie unter dem Metadateneintrag die folgende URL zur Dokument-URL ein. Ersetzen Sie das {tenantId} durch Ihre Microsoft Entra-Mandanten-ID und das {tenantname} durch den Namen Ihres Mandanten ohne 'onmicrosoft.com'.

    https://{tenantname}.ciamlogin.com/{tenantId}/v2.0/.well-known/openid-configuration
    
  7. Geben Sie unter der App-Registrierung die Anwendungs-ID (Client-ID) der App-Registrierung Azure Functions-Authentifizierungsereignis-API ein, die Sie zuvor erstellt haben.

  8. Im Microsoft Entra Admin Center:

    1. Wählen Sie die App-Registrierung Azure Functions-Authentifizierungsereignis-API, die Sie zuvor erstellt haben.
    2. Auswählen Zertifikate & Geheimnisse>geheimer Clientschlüssel>Neuer geheimer Clientschlüssel.
    3. Fügen Sie eine Beschreibung für Ihren geheimen Clientschlüssel hinzu.
    4. Wählen Sie für das Geheimnis eine Ablauffrist aus, oder geben Sie eine benutzerdefinierte Lebensdauer an.
    5. Wählen Sie Hinzufügen aus.
    6. Notieren Sie sich den Wert des geheimen Clientschlüssels, der in Ihrem Clientanwendungscode verwendet werden soll. Dieser Geheimniswert kann nach Verlassen dieser Seite nicht erneut angezeigt werden.
  9. Geben Sie in der Azure-Funktion unter der App-Registrierung den geheimen Clientschlüssel ein.

  10. Deaktivieren Sie die Option Tokenspeicher.

  11. Wählen Sie Hinzufügen aus, um den OpenID Connect-Identitätsanbieter hinzuzufügen.

Schritt 6: Testen der Anwendung

Um Ihren benutzerdefinierten E-Mail-Anbieter zu testen, folgen Sie diesen Schritten:

  1. Öffnen Sie ein neues privates Browserfenster, und navigieren Sie zur folgenden URL, um sich anzumelden.

    https://{tenantname}.ciamlogin.com/{tenant-id}/oauth2/v2.0/authorize?client_id={App_to_sendotp_ID}&response_type=id_token&redirect_uri=https://jwt.ms&scope=openid&state=12345&nonce=12345
    
  2. Ersetzen Sie {tenant-id} durch Ihre Mandanten-ID, Ihren Mandantennamen oder einen Ihrer überprüften Domänennamen. Beispiel: contoso.onmicrosoft.com.

  3. Ersetzen Sie {tenantname} durch den Namen Ihres Mandanten ohne 'onmicrosoft.com'.

  4. Ersetzen Sie {App_to_sendotp_ID} durch die ID der App-Registrierung „Meine Testanwendung“.

  5. Stellen Sie sicher, dass Sie sich mit einem „E-Mail-Einmal-Kennung-Konto“ anmelden. Aktivieren Sie dann „senden Code“. Stellen Sie sicher, dass der an die registrierten E-Mail-Adressen gesendete Code den oben registrierten benutzerdefinierten Anbieter verwendet.

Schritt 7: Auf Microsoft-Anbieter zurückfallen

Wenn ein Fehler innerhalb Ihrer Erweiterung-API auftritt, sendet Entra ID standardmäßig kein OTP an den Benutzer. Sie können stattdessen das Verhalten bei einem Fehler so einstellen, dass auf den Microsoft-Anbieter zurückgegriffen wird.

Um dies zu aktivieren, führen Sie die folgende Anforderung aus. Ersetzen Sie {customListenerObjectId} durch die benutzerdefinierte Authentifizierungslistener-ID, die zuvor aufgezeichnet wurde.

  • Sie benötigen die delegierte Berechtigung EventListener.ReadWrite.All.
PATCH https://graph.microsoft.com/beta/identity/authenticationEventListeners/{customListenerOjectId}

{
    "@odata.type": "#microsoft.graph.onEmailOtpSendListener",
    "handler": {
        "@odata.type": "#microsoft.graph.onOtpSendCustomExtensionHandler",
        "configuration": {
            "behaviorOnError": {
                "@odata.type": "#microsoft.graph.fallbackToMicrosoftProviderOnError"
            }
        }
    }
}

Weitere Informationen