Authentifizierung in Ihrem Agent konfigurieren

Mit bereitgestellten Azure Bot Service-Ressourcen können Sie Ihren Agenten so konfigurieren, dass er sich mit Azure Bot Service authentifiziert. Das Microsoft 365 Agents SDK bietet flexible Möglichkeiten zur Authentifizierungskonfiguration, sodass Sie die Methode wählen können, die am besten zu den funktionalen und sicherheitsbezogenen Bedürfnissen Ihrer Anwendung passt.

Der Microsoft Authentication Library (MSAL) (MSAL)-Authentifizierungsanbieter des .NET Agents SDK ist ein Hilfsprogramm, mit dem Sie Zugriffstoken für Agent-Clients und externe Dienste von einem selbst gehosteten Microsoft 365 Agents SDK-Agent erstellen können.

Das Microsoft.Agents.Athentication.Msal-Paket stellt die MsalAuth-Klasse bereit, die den zentralen Authentifizierungsanbieter darstellt. Sie können den Authentifizierungsanbieter für die folgenden Arten von Anmeldeinformationen konfigurieren:

  • Einzelmandant mit geheimem Clientschlüssel und Mehrfachmandant mit geheimem Clientschlüssel
  • Client-Zertifikat mit Fingerabdruck
  • Clientzertifikat mit Subjektnamen (einschließlich SN+I)
  • Benutzerseitig zugewiesene verwaltete Identität
  • Systemseitig zugewiesene verwaltete Identität
  • Verbundanmeldeinformationen
  • Workloadidentität

Authentifizierungspaket installieren

Installieren Sie das MSAL-Authentifizierungspaket über NuGet:

dotnet add package Microsoft.Agents.Authentication.Msal

Einzelmandant vs. Mehrfachmandant

Die Client-Secret-Authentifizierung unterstützt sowohl Einzelmandant- als auch Mehrfachmandant-Konfigurationen.

Anmerkung

Für Mehrinstanzenfähigkeit müssen Sie die Azure Bot-Instanz als mehrinstanzenfähig und die Microsoft Entra ID-App-Registrierung als Konten in einem beliebigen Organisationsverzeichnis (jeder Microsoft Entra ID-Mandant – mehrinstanzenfähig) konfigurieren. Weitere Informationen finden Sie unter Einzelmandant- und Mehrfachmandant-Apps.

Eine -Verbindung konfigurieren

Das MSAL-Authentifizierungspaket ermöglicht es Ihnen, mehrere unterschiedliche Clients mit der Agents Framework-Hosting-Engine zu erstellen und zu verwenden. Mit dem MSAL-Authentifizierungspaket können Sie mehrere Verbindungskonfigurationen in der Anwendungskonfigurationsdatei definieren. Jede Verbindungskonfiguration kann verwendet werden, um einen benannten Authentifizierungsclient zu erstellen, der die Kommunikation mit externen Diensten oder anderen Agenten unterstützt.

Umgebungsvariablen für jeden Authentifizierungstyp

Der Agent erhält zur Laufzeit die MSAL-Konfiguration aus Umgebungsvariablen.

Die folgenden Abschnitte beschreiben die erforderlichen und optionalen Konfigurationseinstellungen für jeden der unterstützten Authentifizierungstypen bei der MSAL-Authentifizierung sowie Beispielkonfigurationen für jeden Typ.

Einzelmandant mit geheimem Clientschlüssel

Mit diesen Einstellungen können Sie eine Einzelmandant-Verbindung konfigurieren, die mit einem geheimen Clientschlüssel authentifiziert wird.

Einstellungsname Art Standardwert Beschreibung des Dataflows
ClientId Zeichenfolge Null ClientId (AppId), die bei der Erstellung des Zugriffstokens verwendet wird.
ClientSecret string Null Wenn AuthType = ClientSecret ist und „Ist Geheimnis“ verknüpft mit dem Client, sollte dies nur zu Test- und Entwicklungszwecken verwendet werden.
AuthorityEndpoint Zeichenfolge Null Wird, sofern vorhanden, als befugte Stelle zum Anfordern eines Token verwendet.
TenantId Zeichenfolge Null Wenn vorhanden und AuthorityEndpoint gleich null, wird dies zum Erstellen einer autoritativen Stelle zum Anfordern eines Token verwendet
Bereiche Zeichenfolgenliste Null Standard-Listen von Umfängen zur Anforderung von Tokens. Wird nur verwendet, wenn keine Bereiche von der Agent-Verbindungsanforderung übergeben werden

Hier ist ein Beispiel für Appsettings für die Einzelmandanten-ClientSecret:

  "Connections": {
    "ServiceConnection": {
      "Settings": {
        "AuthType": "ClientSecret",
        "ClientId": "{{BOT_ID}}",
        "ClientSecret": "{{BOT_SECRET}}",
        "AuthorityEndpoint": "https://login.microsoftonline.com/{{BOT_TENANT_ID}}",
        "Scopes": [
            "https://api.botframework.com/.default"
          ],
      }
    }
  }

Mehrfachmandant mit geheimem Clientschlüssel

Verwenden Sie diese Einstellungen, um eine mandantenübergreifende Verbindung zu konfigurieren, die mit einem geheimen Clientschlüssel authentifiziert wird.

Einstellungsname Art Standardwert Beschreibung des Dataflows
ClientId Zeichenfolge Null ClientId (AppId), die bei der Erstellung des Zugriffstokens verwendet wird.
ClientSecret string Null Wenn AuthType = ClientSecret ist und „Ist Geheimnis“ verknüpft mit dem Client, sollte dies nur zu Test- und Entwicklungszwecken verwendet werden.
AuthorityEndpoint Zeichenfolge Null Wird, sofern vorhanden, als befugte Stelle zum Anfordern eines Token verwendet.
TenantId Zeichenfolge Null Wenn vorhanden und AuthorityEndpoint gleich null, wird dies zum Erstellen einer autoritativen Stelle zum Anfordern eines Token verwendet
Bereiche Zeichenfolgenliste Null Standard-Listen von Umfängen zur Anforderung von Tokens. Wird nur verwendet, wenn keine Bereiche von der Agent-Verbindungsanforderung übergeben werden

Hier ist ein Beispiel für AppSettings für eine mehrinstanzfähige Verbindung mit geheimem Clientschlüssel:

  "Connections": {
    "ServiceConnection": {
      "Settings": {
        "AuthType": "ClientSecret",
        "ClientId": "{{BOT_ID}}",
        "ClientSecret": "{{BOT_SECRET}}",
        "AuthorityEndpoint": "https://login.microsoftonline.com/botframework.com",
        "Scopes": [
            "https://api.botframework.com/.default"
          ],
      }
    }
  }

Benutzerseitig zugewiesene verwaltete Identität

Verwenden Sie diese Einstellungen, um die Token-Akquisition mit einer benutzerzugewiesenen verwalteten Identität zu konfigurieren.

Einstellungsname Art Standardwert Beschreibung des Dataflows
ClientId Zeichenfolge Null Verwaltete Identität ClientId, die beim Erstellen des Zugriffstokens verwendet wird.

Anmerkung

Wenn Sie mit verwalteten Identitäten arbeiten wollen, muss Ihr Host oder Client mit einem Azure-Dienst ausgeführt werden, bei dem der Dienst entweder als systemseitig zugewiesene verwaltete Identität oder als benutzerseitig zugewiesene verwaltete Identität eingerichtet ist.

Hier ist ein Beispiel für AppSettings für benutzerseitig zugewiesene verwaltete Identität:

  "Connections": {
    "ServiceConnection": {
      "Settings": {
        "AuthType": "UserManagedIdentity",
        "ClientId": "{{BOT_ID}}",
        "Scopes": [
          "https://api.botframework.com/.default"
        ]
      }
    }
  }

Systemseitig zugewiesene verwaltete Identität

Wenn Sie SystemManagedIdentity verwenden, ignoriert der Agent jede angegebene Client-ID und verwendet die systemverwaltete Identität.

Anmerkung

Wenn Sie mit verwalteten Identitäten arbeiten wollen, muss Ihr Host oder Client mit einem Azure-Dienst ausgeführt werden, bei dem der Dienst entweder als systemseitig zugewiesene verwaltete Identität oder als benutzerseitig zugewiesene verwaltete Identität eingerichtet ist.

Hier ist ein Beispiel für appsettings für den benutzerseitig zugewiesene verwaltete Identität-Authentifizierungstyp:

  "Connections": {
    "ServiceConnection": {
      "Settings": {
        "AuthType": "SystemManagedIdentity",
        "Scopes": [
          "https://api.botframework.com/.default"
        ]
      }
    }
  }

Verbundanmeldeinformationen

Verwenden Sie diese Einstellungen, um eine Verbindung zu konfigurieren, die föderierte Zugangsdaten gegen Zugriffstoken austauscht.

Einstellungsname Art Standardwert Beschreibung des Dataflows
ClientId Zeichenfolge Null ClientId (AppId), die bei der Erstellung des Zugriffstokens verwendet wird.
AuthorityEndpoint Zeichenfolge Null Wird, sofern vorhanden, als befugte Stelle zum Anfordern eines Token verwendet.
TenantId Zeichenfolge Null Wenn vorhanden und AuthorityEndpoint gleich null, wird dies zum Erstellen einer autoritativen Stelle zum Anfordern eines Token verwendet
Bereiche Zeichenfolgenliste Null Standard-Listen von Umfängen zur Anforderung von Tokens. Wird nur verwendet, wenn keine Bereiche von der Agent-Verbindungsanforderung übergeben werden
FederatedClientId Zeichenfolge Null Verwaltete Identität ClientId, die beim Erstellen des Zugriffstokens verwendet wird.

Hier ist ein Beispiel für appsettings für Federated Credentials:

  "Connections": {
    "ServiceConnection": {
      "Settings": {
        "AuthType": "FederatedCredentials",
        "ClientId": "{{BOT_ID}}",
        "AuthorityEndpoint": "https://login.microsoftonline.com/{{BOT_TENANT_ID}}",
        "FederatedClientId": "{{BOT_FEDERATED_ID}}",
        "Scopes": [
          "https://api.botframework.com/.default"
        ]
      }
    }
  }

Workloadidentität

Verwenden Sie diese Einstellungen, um die Authentifizierung der Arbeitslast-Identität mittels einer föderierten Token-Datei zu konfigurieren.

Einstellungsname Art Standardwert Beschreibung des Dataflows
ClientId Zeichenfolge Null ClientId (AppId), die bei der Erstellung des Zugriffstokens verwendet wird.
AuthorityEndpoint Zeichenfolge Null Wird, sofern vorhanden, als befugte Stelle zum Anfordern eines Token verwendet.
TenantId Zeichenfolge Null Wenn vorhanden und AuthorityEndpoint gleich null, wird dies zum Erstellen einer autoritativen Stelle zum Anfordern eines Token verwendet
Bereiche Zeichenfolgenliste Null Standard-Listen von Umfängen zur Anforderung von Tokens. Wird nur verwendet, wenn keine Bereiche von der Agent-Verbindungsanforderung übergeben werden
FederatedTokenFile Zeichenfolge Null Die Token-Datei (identisch mit der AKS AZURE_FEDERATED_TOKEN_FILE Umgebungsvariable)

Hier ist ein Beispiel für Appsettings für die Einzelmandanten-WorkloadIdentity:

  "Connections": {
    "ServiceConnection": {
      "Settings": {
        "AuthType": "WorkloadIdentity",
        "ClientId": "{{BOT_ID}}",
        "AuthorityEndpoint": "https://login.microsoftonline.com/{{BOT_TENANT_ID}}",
        "FederatedTokenFile": "{{BOT_FEDERATED_TOKENFILE}}",
        "Scopes": [
          "https://api.botframework.com/.default"
        ]
      }
    }
  }

Optionale Verbundanmeldeinformationen oder Workloadidentitäts-Client-Assertion-Optionen

Verwenden Sie diese optionalen Einstellungen, um den Inhalt von Client-Assertions für Verbundanmeldeinformationen oder Workloadidentitätsflows anzupassen.

Einstellungsname Art Standardwert Beschreibung des Dataflows
ClientId Zeichenfolge Null Client-ID, für die eine signierte Assertion angefordert wird
TokenEndpoint Zeichenfolge Null Der vorgesehene Token-Endpunkt
Ansprüche Zeichenfolge Null Ansprüche, die in die Client-Assertion aufgenommen Greifen Sie auf die Copilot Studio Kit App zu
ClientCapabilities Zeichenfolge[] Null Fähigkeiten, die die Client-Anwendung angibt.
  "Connections": {
    "ServiceConnection": {
      "Settings": {
        "AuthType": "WorkloadIdentity",
        "ClientId": "{{BOT_ID}}",
        "AuthorityEndpoint": "https://login.microsoftonline.com/{{BOT_TENANT_ID}}",
        "FederatedTokenFile": "{{BOT_FEDERATED_TOKENFILE}}",
        "Scopes": [
          "https://api.botframework.com/.default"
        ],
        "AssertionRequestOptions": {
            "ClientId": null,
            "TokenEndpoint": null,
            "Claims": null,
            "ClientCapabilities": null,
        }
      }
    }
  }

Zertifikat mit Subjektnamen (einschließlich SN+I)

Verwenden Sie diese Einstellungen, um die zertifikatsbasierte Authentifizierung anhand des Subjektnamens des Zertifikats zu konfigurieren, einschließlich SN+I-Szenarien.

AuthType Art Standardwert Beschreibung des Dataflows
AuthorityEndpoint Zeichenfolge Null Wird, sofern vorhanden, als befugte Stelle zum Anfordern eines Token verwendet.
TenantId Zeichenfolge Null Wenn vorhanden und AuthorityEndpoint gleich null, wird dies zum Erstellen einer autoritativen Stelle zum Anfordern eines Token verwendet
Bereiche Zeichenfolgenliste Null Standard-Listen von Umfängen zur Anforderung von Tokens. Wird nur verwendet, wenn keine Bereiche von der Agent-Verbindungsanforderung übergeben werden
ClientId Zeichenfolge Null ClientId (AppId), die bei der Erstellung des Zugriffstokens verwendet wird.
CertSubjectName Zeichenfolge Null Wenn AuthType CertificateSubjectName ist, ist dies der gesuchte Subjektname
CertStoreName Zeichenfolge Eigene Wenn AuthType entweder CertificateSubjectName oder Certificate ist, wird hier angegeben, in welchem Zertifikatsspeicher gesucht wird
ValidCertificateOnly bool True Das Zertifikat muss eine gültige Zertifikatskette besitzen.
SendX5C bool False Ermöglicht die automatische Erneuerung von Zertifikaten mit entsprechender Konfiguration.

Im Folgenden finden Sie ein Beispiel für Appsettings für Zertifikate unter Verwendung des Subjektnamens für den Subjektnamen und Aussteller (SNI) und die Mehrinstanzenfähigkeit:

  "Connections": {
    "ServiceConnection": {
      "Settings": {
        "AuthType": "CertificateSubjectName",
        "ClientId": "{{BOT_ID}}",
        "CertSubjectName": "{{BOT_CERT_SUBJECTNAME}}",
        "SendX5C": true,
        "AuthorityEndpoint": "https://login.microsoftonline.com/botframework.com",
        "Scopes": [
          "https://api.botframework.com/.default"
        ]
      }
    }
  },

Hier ist ein Beispiel für Appsettings für den Zertifikatsubjektnamen für SN+I und einen einzelnen Mandanten:

  "Connections": {
    "ServiceConnection": {
      "Settings": {
        "AuthType": "CertificateSubjectName",
        "ClientId": "{{BOT_ID}}",
        "CertSubjectName": "{{BOT_CERT_SUBJECTNAME}}",
        "SendX5C": true,
        "AuthorityEndpoint": "https://login.microsoftonline.com/{{BOT_TENANT_ID}}",
        "Scopes": [
          "https://api.botframework.com/.default"
        ]
      }
    }
  },

Client-Zertifikat mit Fingerabdruck

Verwenden Sie diese Einstellungen, um die zertifikatsbasierte Authentifizierung anhand des Zertifikats-Daumenabdrucks zu konfigurieren.

AuthType Art Standardwert Beschreibung des Dataflows
AuthorityEndpoint Zeichenfolge Null Wird, sofern vorhanden, als befugte Stelle zum Anfordern eines Token verwendet.
TenantId Zeichenfolge Null Wenn vorhanden und AuthorityEndpoint gleich null, wird dies zum Erstellen einer autoritativen Stelle zum Anfordern eines Token verwendet
Bereiche Zeichenfolgenliste Null Standard-Listen von Umfängen zur Anforderung von Tokens. Wird nur verwendet, wenn keine Bereiche von der Agent-Verbindungsanforderung übergeben werden
ClientId Zeichenfolge Null ClientId (AppId), die bei der Erstellung des Zugriffstokens verwendet wird.
CertThumbprint Zeichenfolge Null Fingerabdruck des zu ladenden Zertifikats, nur gültig, wenn AuthType auf Zertifikat gesetzt ist
CertStoreName Zeichenfolge Eigene Wenn AuthType entweder CertificateSubjectName oder Certificate ist, wird hier angegeben, in welchem Zertifikatsspeicher gesucht wird
ValidCertificateOnly bool True Das Zertifikat muss eine gültige Zertifikatskette besitzen.
SendX5C bool False Ermöglicht die automatische Erneuerung von Zertifikaten mit entsprechender Konfiguration.

Hier ist ein Beispiel für Appsettings für ein Zertifikat mit dem Zertifikat-Fingerabdruck:

  "Connections": {
    "ServiceConnection": {
      "Settings": {
        "AuthType": "Certificate",
        "ClientId": "{{BOT_ID}}",
        "CertThumbprint": "{{BOT_CERT_THUMBPRINT}}",
        "AuthorityEndpoint": "https://login.microsoftonline.com/botframework.com",
        "Scopes": [
          "https://api.botframework.com/.default"
        ]
      }
    }
  },

Standardkonfiguration-Anbieter für MSAL

Um die Einrichtung zu vereinfachen, stellen wir eine Service Provider-Erweiterung zur Verfügung, mit der Sie die Standardkonfigurationen für MSAL zu Ihrem Agent hinzufügen können.

Hier ist ein Beispiel für einen Standard-Konfigurationsanbieter für MSAL für einen ASP.NET Core-Host in einer Program.cs-Klasse.

Die registrierte IConnections Instanz verwaltet dies. Die IConnections-Instanz wird standardmäßig hinzugefügt, wenn Sie AddAgent verwenden.

// Register your AgentApplication
builder.AddAgent<MyAgent>();

Falls AddAgent nicht verwendet wird, muss die IConnections-Instanz explizit registriert werden.

    // Add Connections object to access configured token connections.
    builder.Services.AddSingleton<IConnections, ConfigurationConnections>();

Weitere MSAL-Konfigurationsoptionen

Es gibt verschiedene gemeinsame Konfigurationsoptionen, die allgemeine Einstellungen für das Abrufen von Token aus Microsoft Entra Identity steuern.

Diese Einstellungen sind:

Verwenden Sie die folgenden gemeinsamen Einstellungen, um das MSAL-Anfrage-Timeout, das Wiederholungsverhalten und die Protokollierungsdetails zu steuern.

Einstellungsname Art Standardwert Beschreibung des Dataflows
MSALRequestTimeout TimeSpan 30 Sekunden Diese Einstellung legt fest, wie lange der Client nach dem Senden einer Anfrage auf eine Antwort von Microsoft Entra ID wartet.
MSALRetryCount Int 3 Diese Einstellung legt fest, wie viele Wiederholungsversuche der Anbieter für eine einzelne Token-Anforderung durchführt.
MSALEnabledLogPII Bool False Diese Einstellung legt fest, ob MSAL dem zugeordneten Logger personenbezogene Daten zur Verfügung stellt.

Diese Einstellungen werden mit allen Clients geteilt, die mit dem MSAL-Authentifizierungsanbieter erstellen. Diese Einstellungen sollen aus einem IConfiguration-Reader in einem Konfigurationsabschnitt namens „MSALConfiguration“ gelesen werden.

Anmerkung

MSALConfiguration ist eine optionale Konfiguration. Wenn Sie diese Konfiguration nicht festlegen, werden die Standardkonfigurationen für diese Werte verwendet.

Hier ist ein Beispiel für den Eintrag in einer appsettings.json Datei:

{
  "MSALConfiguration": {
    "MSALEnabledLogPII": "true",
    "MSALRequestTimeout": "00:00:40",
    "MSALRetryCount": "1"
  },
}

In diesem Fall würde dieser Einstellungsblock alle mit dem MSAL-Anbieter erstellten MSAL-Clients anweisen, die Protokollierung persönlicher Daten zu aktivieren, das Zeitlimit auf 40 Sekunden zu setzen und die Anzahl der Wiederholungen auf 1 zu reduzieren.

Diese Erweiterung sucht in Ihrem IConfiguration-Objekt nach einem Konfigurationsbereich mit dem Namen „MSALConfiguration“ und erstellt daraus ein MSAL-Konfigurationsobjekt.

Falls die MSALConfig-Sektion nicht gefunden wird, wird das MSAL-Konfigurationsobjekt mit den Standardwerten erstellt.

    // Add default agent MsalAuth support
    builder.Services.AddDefaultMsalAuth(builder.Configuration);

    // Register your AgentApplication
    builder.AddAgent<MyAgent>();

Protokollierungsunterstützung für die Authentifizierung

Das MSAL-Authentifizierungssystem ermöglicht eine unabhängige Protokollierung von Authentifizierungsabläufen zur Telemetrieintegration, falls Sie Probleme bei der Token-Beschaffung beheben müssen.

Um Protokollierung zu aktivieren, fügen Sie einen Eintrag für Microsoft.Agents.Authentication.Msal zu den App-Einstellungen Ihrer Anwendung hinzu, um eine ILogger für die Protokollierung von Token-Vorgängen Ihrer Verbindungen einzurichten. Wenn Sie die MSALEnabledLogPII Option hinzufügen, werden auch persönliche Daten für Ihre Verbindung einbezogen.

Hier ist ein Beispiel für den Protokollierungsblock in diesem Fall:

  "Logging": {
    "LogLevel": {
      "Default": "Warning",
      "Microsoft.Agents": "Warning",
      "Microsoft.Hosting.Lifetime": "Information",
      "Microsoft.Agents.Authentication.Msal": "Trace"
    }
  }

In diesem Fall ist die Protokollierung für mehrere Module aktiviert, darunter Microsoft.Agents.Authentication.Msal, wobei die Überwachungsebene für MSAL auf Überwachen gesetzt ist.

Das JavaScript SDK benötigt einen AuthenticationProvider, um JSON Web Tokens (JWT) zu erstellen und Aktivitäten an den Zielkanal zu übermitteln. Weitere Informationen finden Sie unter Zugriffstoken in der Microsoft Identitätsplattform.

Das @microsoft/agents-hosting-Paket stellt einen Standard-Authentifizierungsanbieter bereit, der auf der Microsoft Authentication Library (MSAL) (MSAL) basiert. Sie können das Paket für die folgenden Authentifizierungstypen konfigurieren:

  • Einzelmandant mit geheimem Clientschlüssel
  • Mehrfachmandant mit geheimem Clientschlüssel
  • Benutzerseitig verwaltete Identität
  • Systemseitig verwaltete Identität
  • Verbundanmeldeinformationen
  • Workloadidentität
  • Zertifikat

Authentifizierungspaket installieren

Installieren Sie das MSAL-Authentifizierungspaket über npm:

npm install @microsoft/agents-hosting

Einzelmandant vs. mehrinstanzfähig

Die Authentifizierung mit geheimem Clientschlüssel und Clientzertifikat unterstützt sowohl Einzelmandanten- als auch mehrinstanzfähige Mandantkonfigurationen.

Benutzerseitig zugewiesene verwaltete Identitäten, Anmeldeinformatiopnen für Verbundidentitäten und Workload-Identität unterstützen nur Einzelmandantenkonfigurationen.

Anmerkung

Für Mehrinstanzenfähigkeit müssen Sie die Azure Bot-Instanz als mehrinstanzenfähig und die Microsoft Entra ID-App-Registrierung als Konten in einem beliebigen Organisationsverzeichnis (jeder Microsoft Entra ID-Mandant – mehrinstanzenfähig) konfigurieren. Weitere Informationen finden Sie unter Einzelmandant- und Mehrfachmandant-Apps.

Eine -Verbindung konfigurieren

Die MSAL-Authentifizierungsbibliothek ermöglicht es Ihnen, mit der Agents Framework Hosting-Engine mehrere verschiedene Clients zu erstellen und zu nutzen. Durch die Verwendung der MSAL-Authentifizierungsbibliothek können Sie mehrere Verbindungskonfigurationen in der Anwendungskonfigurationsdatei konfigurieren. Jede Verbindungskonfiguration kann einen benannten Authentifizierungsclient erstellen, um die Kommunikation mit externen Diensten oder anderen Agenten zu unterstützen.

In den folgenden Abschnitten werden die erforderlichen und optionalen Konfigurationseinstellungen für alle unterstützten Authentifizierungsarten des MSAL-Authentifizierungsanbieters beschrieben. Sie enthalten auch Beispielkonfigurationen für jeden Authentifizierungstyp.

Umgebungsvariablen für jeden Authentifizierungstyp

Der Agent erhält zur Laufzeit die MSAL-Konfiguration aus Umgebungsvariablen mithilfe der Hilfsfunktion loadAuthConfigFromEnv(): AuthConfiguration. Der CloudAdapter wird mit AuthConfiguration initialisiert.

Die Verbindungseinstellungen verwenden das Format CONNECTIONS__<CONNECTION_NAME>__SETTINGS__<PROPERTY>.

Wenn AUTHTYPE vorhanden ist, verwendet das SDK diesen Wert, um den Token-Beschaffungsprozess auszuwählen. Wenn AUTHTYPE ausgelassen wird, fällt das SDK auf das Legacy-Verhalten zurück und bestimmt den Authentifizierungsfluss anhand der konfigurierten Anmeldeinformationen.

Einzelmandant mit geheimem Clientschlüssel

Mit diesen Einstellungen können Sie eine Einzelmandant-Verbindung konfigurieren, die mit einem geheimen Clientschlüssel authentifiziert wird.

Einstellungsname Art Standardwert Beschreibung des Dataflows
CLIENTID Zeichenfolge Kein Wert Die Client-ID (App-ID) der App-Registrierung.
GEHEIMER CLIENTSCHLÜSSEL Zeichenfolge Kein Wert Das mit der App-Registrierung verknüpfte Geheimnis. Nur geeignet für Test- und Entwicklungszwecke.
TENANTID Zeichenfolge Kein Wert Die Microsoft Entra ID-Mandanten-ID für die App-Registrierung.
AUTHTYPE Zeichenfolge Kein Wert Legen Sie ClientSecret fest.
UMFANG Zeichenfolge Kein Wert Standardressourcenbereich zum Anfordern von Tokens, wenn vom Aufrufer keiner angegeben wird.
AUTORITATIVE STELLE Zeichenfolge Kein Wert Wird, sofern vorhanden, als autoritative Stelle zum Anfordern eines Token verwendet. Wenn nicht festgelegt, ist der Standardwert https://login.microsoftonline.com/{TENANTID}.
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=ClientSecret
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={app-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTSECRET={app-registration-secret}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__TENANTID={tenant-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__SCOPE=https://api.botframework.com

Die Einzelmandant-Konfiguration mit geheimem Clientschlüssel wird für die lokale Entwicklung empfohlen.

Mehrfachmandant mit geheimem Clientschlüssel

Für Mehrinstanzen-Szenarien, die ein Client Secret verwenden, setzen Sie den Authority Endpoint auf den botframework.com-Mandant:

Einstellungsname Art Standardwert Beschreibung des Dataflows
CLIENTID Zeichenfolge Kein Wert Die Client-ID (App-ID) der App-Registrierung.
GEHEIMER CLIENTSCHLÜSSEL Zeichenfolge Kein Wert Das mit der App-Registrierung verknüpfte Geheimnis. Nur geeignet für Test- und Entwicklungszwecke.
AUTHTYPE Zeichenfolge Kein Wert Legen Sie ClientSecret fest.
AUTORITATIVE STELLE Zeichenfolge Kein Wert Auf https://login.microsoftonline.com/botframework.com für die Mehrinstanzenfähigkeit festlegen.
UMFANG Zeichenfolge Kein Wert Standardressourcenbereich zum Anfordern von Tokens, wenn vom Aufrufer keiner angegeben wird.
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=ClientSecret
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={app-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTSECRET={app-registration-secret}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHORITY=https://login.microsoftonline.com/botframework.com
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__SCOPE=https://api.botframework.com

UserManagedIdentity

Verwenden Sie diese Einstellungen, um den Token-Erwerb mit einer benutzerzugewiesenen verwalteten Identität zu konfigurieren.

Einstellungsname Art Standardwert Beschreibung des Dataflows
CLIENTID Zeichenfolge Kein Wert Die Client-ID der verwalteten Identität, die beim Erstellen des Zugriffstokens verwendet wird.
AUTHTYPE Zeichenfolge Kein Wert Legen Sie UserManagedIdentity fest.
UMFANG Zeichenfolge Kein Wert Standardressourcenbereich zum Anfordern von Tokens, wenn vom Aufrufer keiner angegeben wird.
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=UserManagedIdentity
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={managed-identity-client-id}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__SCOPE=https://api.botframework.com

Verwaltete Identität ist die empfohlene Konfiguration für Produktionsszenarien. Weitere Informationen finden Sie unter What is managed identities for Azure resources? (Worum handelt es sich bei verwalteten Identitäten für Azure-Ressourcen?).

Anmerkung

Wenn Sie mit verwalteten Identitäten arbeiten, muss Ihr Host oder Client mit einem Azure-Dienst ausgeführt werden, bei dem der Dienst entweder als systemseitig zugewiesene verwaltete Identität oder als benutzerseitig zugewiesene verwaltete Identität eingerichtet ist. Um zu sehen, welche Azure-Dienste verwaltete Identitäten für Azure-Ressourcen unterstützen, siehe Verwaltete Identitäten für Azure-Ressourcen.

SystemManagedIdentity

Wenn Sie den Authentifizierungstyp SystemManagedIdentity verwenden, wird die Client-ID ignoriert und die systemverwaltete Identität des Dienstes verwendet.

Einstellungsname Art Standardwert Beschreibung des Dataflows
AUTHTYPE Zeichenfolge Kein Wert Legen Sie SystemManagedIdentity fest.
UMFANG Zeichenfolge Kein Wert Standardressourcenbereich zum Anfordern von Tokens, wenn vom Aufrufer keiner angegeben wird.
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=SystemManagedIdentity
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__SCOPE=https://api.botframework.com

Anmerkung

Wenn Sie mit verwalteten Identitäten arbeiten, muss Ihr Host oder Client mit einem Azure-Dienst ausgeführt werden, bei dem der Dienst entweder als systemseitig zugewiesene verwaltete Identität oder als benutzerseitig zugewiesene verwaltete Identität eingerichtet ist. Um zu sehen, welche Azure-Dienste verwaltete Identitäten für Azure-Ressourcen unterstützen, siehe Verwaltete Identitäten für Azure-Ressourcen.

FederatedCredentials

Verwenden Sie diese Einstellungen, um eine Single-Tenant-App zu konfigurieren, die mithilfe von Federated Credentials authentifiziert wird.

Einstellungsname Art Standardwert Beschreibung des Dataflows
CLIENTID Zeichenfolge Kein Wert Die Client-ID (App-ID) der App-Registrierung.
TENANTID Zeichenfolge Kein Wert Die Microsoft Entra ID-Mandanten-ID für die App-Registrierung.
AUTHTYPE Zeichenfolge Kein Wert Legen Sie FederatedCredentials fest.
AUTORITATIVE STELLE Zeichenfolge Kein Wert Wird, sofern vorhanden, als autoritative Stelle zum Anfordern eines Token verwendet. Wenn nicht festgelegt, ist der Standardwert https://login.microsoftonline.com/{TENANTID}.
UMFANG Zeichenfolge Kein Wert Standardressourcenbereich zum Anfordern von Tokens, wenn vom Aufrufer keiner angegeben wird.
FICCLIENTID Zeichenfolge Kein Wert Die verwaltete Identitäts-Client-ID, die zum Abrufen des externen Tokens für Verbundanmeldeinformationen verwendet wird.
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=FederatedCredentials
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={app-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__TENANTID={tenant-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHORITY=https://login.microsoftonline.com/{tenant-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__FICCLIENTID={managed-identity-client-id}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__SCOPE=https://api.botframework.com

Weitere Informationen finden Sie unter Authentifizierung mithilfe von Verbundidentitäts-Anmeldeinformationen.

WorkloadIdentity

Mit diesen Einstellungen konfigurieren Sie den Token-Abruf über Microsoft Entra Workload Identity.

Einstellungsname Art Standardwert Beschreibung des Dataflows
AUTHTYPE Zeichenfolge Kein Wert Legen Sie WorkloadIdentity fest.
CLIENTID Zeichenfolge Kein Wert Die Client-ID (App-ID) der App-Registrierung.
TENANTID Zeichenfolge Kein Wert Die Microsoft Entra ID-Mandanten-ID für die App-Registrierung.
AUTORITATIVE STELLE Zeichenfolge Kein Wert Wird, sofern vorhanden, als autoritative Stelle zum Anfordern eines Token verwendet. Wenn nicht festgelegt, ist der Standardwert https://login.microsoftonline.com/{TENANTID}.
UMFANG Zeichenfolge Kein Wert Standardressourcenbereich zum Anfordern von Tokens, wenn vom Aufrufer keiner angegeben wird.
FEDERATEDTOKENFILE Zeichenfolge Kein Wert Pfad zur föderierten Tokendatei, die von der Workload-Identitätsumgebung bereitgestellt wird.
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=WorkloadIdentity
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={app-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__TENANTID={tenant-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHORITY=https://login.microsoftonline.com/{tenant-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__FEDERATEDTOKENFILE=/var/run/secrets/azure/tokens/azure-identity-token
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__SCOPE=https://api.botframework.com

Einzelmandant mit Clientzertifikat

Mit diesen Einstellungen können Sie eine Einzelmandant-Verbindung konfigurieren, die mit einem Client-Zertifikat authentifiziert wird.

Einstellungsname Art Standardwert Beschreibung des Dataflows
CLIENTID Zeichenfolge Kein Wert Die Client-ID (App-ID) der App-Registrierung.
TENANTID Zeichenfolge Kein Wert Die Microsoft Entra ID-Mandanten-ID für die App-Registrierung.
AUTHTYPE Zeichenfolge Kein Wert Legen Sie Certificate fest.
CERTPEMFILE Zeichenfolge Kein Wert Pfad zur Privacy-Enhanced Mail (PEM)-Zertifikatsdatei.
CERTKEYFILE Zeichenfolge Kein Wert Pfad zur Datei des privaten Schlüssels für das Zertifikat.
UMFANG Zeichenfolge Kein Wert Standardressourcenbereich zum Anfordern von Tokens, wenn vom Aufrufer keiner angegeben wird.
AUTORITATIVE STELLE Zeichenfolge Kein Wert Wird, sofern vorhanden, als autoritative Stelle zum Anfordern eines Token verwendet.
SENDX5C Boolesch False Ermöglicht das Senden des x5c-Headers während der zertifikatsbasierten Token-Anforderung.
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=Certificate
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={app-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__TENANTID={tenant-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CERTPEMFILE={path-to-pem-file}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CERTKEYFILE={path-to-key-file}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__SCOPE=https://api.botframework.com

Anmerkung

Das JS-SDK liest das PEM-Zertifikat und die zugehörige private Schlüsseldatei direkt von der Festplatte und berechnet automatisch den Zertifikatsabdruck. Die Schlüsseldatei sollte nicht passwortgeschützt sein.

Mehrinstanzenfähigkeit mit Clientzertifikat

Für mehrinstanzfähige Szenarien, die ein Client-Zertifikat verwenden, setzen Sie den Authority Endpoint auf den Mandanten botframework.com:

CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=Certificate
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={app-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CERTPEMFILE={path-to-pem-file}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CERTKEYFILE={path-to-key-file}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHORITY=https://login.microsoftonline.com/botframework.com
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__SCOPE=https://api.botframework.com

Abwärtskompatibilität mit Azure Bot Framework SDK

Um die Konfiguration im selben Format wie das Azure Bot Framework SDK zu laden, verwenden Sie loadPrevAuthConfigFromEnv(): AuthConfiguration.

Verwenden Sie diese Legacy-Einstellungsnamen beim Migrieren bestehender Bot Framework-SDK-Konfigurationen.

Einstellungsname Art Standardwert Beschreibung des Dataflows
MicrosoftAppTenantId Zeichenfolge Null Microsoft Entra ID Mandant-ID (legacy Bot Framework SDK-Format)
MicrosoftAppId Zeichenfolge Null Client-ID (App-ID) der App-Registrierung (legacy-Bot Framework SDK-Format)
MicrosoftAppPassword Zeichenfolge Null App-Secret (legacy Bot Framework SDK-Format)
MicrosoftAppTenantId={tenant-id-guid}
MicrosoftAppId={app-id-guid}
MicrosoftAppPassword={app-registration-secret}

Benutzerdefinierter Authentifizierungsanbieter

Benutzer, die einen angepassten Authentifizierungsanbieter benötigen, können die Schnittstelle implementieren:

export interface AuthProvider {
  getAccessToken: (authConfig: AuthConfiguration, scope: string) => Promise<string>
}

Als Beispiel lässt sich AuthProvider unter Verwendung von @azure/identity implementieren:

import { EnvironmentCredential } from "@azure/identity"
import { AuthProvider, AuthConfiguration } from "@microsoft/agents-hosting"
class DevTokenProvider implements AuthProvider {
  async getAccessToken(authConfig: AuthConfiguration): Promise<string> {
    const id = new EnvironmentCredential()
    const tokenResponse = await id.getToken("https://api.botframework.com/.default")
    return tokenResponse.token
  }

Um CloudAdapter mithilfe von DevTokenProvider zu instanziieren

const adapter = new CloudAdapter(authConfig, new DevTokenProvider())

amework.com/.default") return tokenResponse.token }


To instantiate the `CloudAdapter` by using the `DevTokenProvider`

```ts
const adapter = new CloudAdapter(authConfig, new DevTokenProvider())

Das Python Agents SDK-Microsoft Authentifizierungsbibliothek (MSAL)-Paket stellt Ihnen die Tools bereit, mit dem Sie Zugriffstoken für Agent-Clients und externe Dienste von einem selbst gehosteten Microsoft 365 Agents SDK-Agent erstellen können.

Das microsoft-agents-authentication-msal-Paket stellt die MsalAuth-Klasse bereit, die den zentralen Authentifizierungsanbieter darstellt. Sie können den Authentifizierungsanbieter für die folgenden Arten von Anmeldeinformationen konfigurieren:

  • Geheimer Clientschlüssel
  • Clientzertifikat
  • Benutzerseitig zugewiesene verwaltete Identität
  • Systemseitig zugewiesene verwaltete Identität

Authentifizierungspaket installieren

Installieren Sie das MSAL-Authentifizierungspaket von PyPI:

pip install microsoft-agents-authentication-msal

Einzelmandant vs. Mehrfachmandant

Die Authentifizierung mit geheimem Clientschlüssel und Clientzertifikat unterstützt sowohl Einzelmandanten- als auch mehrinstanzfähige Mandantkonfigurationen.

Benutzerseitig zugewiesene verwaltete Identitäten und systemseitig zugewiesene verwaltete Identitäten unterstützen nur Einzelmandantenkonfigurationen.

Anmerkung

Für Mehrinstanzenfähigkeit müssen Sie die Azure Bot-Instanz als mehrinstanzenfähig und die Microsoft Entra ID-App-Registrierung als Konten in einem beliebigen Organisationsverzeichnis (jeder Microsoft Entra ID-Mandant – mehrinstanzenfähig) konfigurieren. Weitere Informationen finden Sie unter Einzelmandant- und Mehrfachmandant-Apps.

Eine -Verbindung konfigurieren

Die MSAL-Authentifizierungsbibliothek ermöglicht es Ihnen, mehrere Clients mit der Agents Framework-Hosting-Engine zu erstellen und zu verwenden. Jede Verbindungskonfiguration erstellt einen benannten Authentifizierungs-Client, um die Kommunikation mit externen Diensten oder anderen Agenten zu ermöglichen.

Konfiguration über Umgebungsvariablen bereitzustellen, die die doppelte Unterstrich-(__)-Namenskonvention für verschachtelte Einstellungen verwenden. Die MsalConnectionManager-Klasse liest diese Variablen aus, um AgentAuthConfiguration-Instanzen für jede benannte Verbindung zu erstellen.

Wichtig

Der Verbindungsmanager benötigt mindestens eine Verbindung mit dem Namen SERVICE_CONNECTION.

Umgebungsvariablen für jeden Authentifizierungstyp

Der Agent erhält zur Laufzeit die MSAL-Konfiguration aus Umgebungsvariablen mithilfe der Hilfsfunktion load_configuration_from_env().

Die folgenden Abschnitte beschreiben die erforderlichen Konfigurationseinstellungen für jeden der unterstützten Authentifizierungstypen und enthalten Beispiele für Umgebungsvariablen für jeden Typ.

Einzelmandant mit geheimem Clientschlüssel

Mit diesen Einstellungen können Sie eine Einzelmandant-Verbindung konfigurieren, die mit einem geheimen Clientschlüssel authentifiziert wird.

Einstellungsname Art Standardwert Beschreibung des Dataflows
CLIENTID Zeichenfolge Kein Wert Die Client-ID (App-ID) der App-Registrierung.
GEHEIMER CLIENTSCHLÜSSEL Zeichenfolge Kein Wert Das mit der App-Registrierung verknüpfte Geheimnis. Nur geeignet für Test- und Entwicklungszwecke.
TENANTID Zeichenfolge Kein Wert Die Microsoft Entra ID-Mandanten-ID für die App-Registrierung.
AUTHTYPE Zeichenfolge ClientSecret Der Authentifizierungstyp Legen Sie ClientSecret fest.
UMFANG Zeichenfolgenliste Kein Wert Standard-Liste von Umfängen zur Anforderung von Tokens. Wird nur verwendet, wenn keine Bereiche von der Agent-Verbindungsanforderung übergeben werden.
AUTORITATIVE STELLE Zeichenfolge Kein Wert Wird, sofern vorhanden, als autoritative Stelle zum Anfordern eines Token verwendet. Wenn nicht festgelegt, ist der Standardwert https://login.microsoftonline.com/{TENANTID}.
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=ClientSecret
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={app-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTSECRET={app-registration-secret}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__TENANTID={tenant-id-guid}

Die Einzelmandant-Konfiguration mit geheimem Clientschlüssel wird für die lokale Entwicklung empfohlen.

Mehrfachmandant mit geheimem Clientschlüssel

Für Mehrinstanzen-Szenarien, die ein Client Secret verwenden, setzen Sie den Authority Endpoint auf den botframework.com-Mandant:

Einstellungsname Art Standardwert Beschreibung des Dataflows
CLIENTID Zeichenfolge Kein Wert Die Client-ID (App-ID) der App-Registrierung.
GEHEIMER CLIENTSCHLÜSSEL Zeichenfolge Kein Wert Das mit der App-Registrierung verknüpfte Geheimnis. Nur geeignet für Test- und Entwicklungszwecke.
AUTHTYPE Zeichenfolge ClientSecret Der Authentifizierungstyp Legen Sie ClientSecret fest.
AUTORITATIVE STELLE Zeichenfolge Kein Wert Auf https://login.microsoftonline.com/botframework.com für die Mehrinstanzenfähigkeit festlegen.
UMFANG Zeichenfolgenliste Kein Wert Standard-Liste von Umfängen zur Anforderung von Tokens.
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=ClientSecret
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={app-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTSECRET={app-registration-secret}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHORITY=https://login.microsoftonline.com/botframework.com

Benutzerseitig zugewiesene verwaltete Identität

Verwenden Sie diese Einstellungen, um die Token-Akquisition mit einer benutzerzugewiesenen verwalteten Identität zu konfigurieren.

Einstellungsname Art Standardwert Beschreibung des Dataflows
CLIENTID Zeichenfolge Kein Wert Die Client-ID der verwalteten Identität, die beim Erstellen des Zugriffstokens verwendet wird.
AUTHTYPE Zeichenfolge ClientSecret Der Authentifizierungstyp Legen Sie UserManagedIdentity fest.
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={managed-identity-client-id}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=UserManagedIdentity

Verwaltete Identität ist die empfohlene Konfiguration für Produktionsszenarien. Weitere Informationen finden Sie unter What is managed identities for Azure resources? (Worum handelt es sich bei verwalteten Identitäten für Azure-Ressourcen?).

Anmerkung

Wenn Sie mit verwalteten Identitäten arbeiten, muss Ihr Host oder Client mit einem Azure-Dienst ausgeführt werden, bei dem der Dienst entweder als systemseitig zugewiesene verwaltete Identität oder als benutzerseitig zugewiesene verwaltete Identität eingerichtet ist. Um zu sehen, welche Azure-Dienste verwaltete Identitäten für Azure-Ressourcen unterstützen, siehe Verwaltete Identitäten für Azure-Ressourcen.

Systemseitig zugewiesene verwaltete Identität

Wenn Sie den Authentifizierungstyp SystemManagedIdentity verwenden, wird die Client-ID ignoriert und die systemverwaltete Identität des Dienstes verwendet.

Einstellungsname Art Standardwert Beschreibung des Dataflows
AUTHTYPE Zeichenfolge ClientSecret Der Authentifizierungstyp Legen Sie SystemManagedIdentity fest.
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=SystemManagedIdentity

Anmerkung

Wenn Sie mit verwalteten Identitäten arbeiten, muss Ihr Host oder Client mit einem Azure-Dienst ausgeführt werden, bei dem der Dienst entweder als systemseitig zugewiesene verwaltete Identität oder als benutzerseitig zugewiesene verwaltete Identität eingerichtet ist. Um zu sehen, welche Azure-Dienste verwaltete Identitäten für Azure-Ressourcen unterstützen, siehe Verwaltete Identitäten für Azure-Ressourcen.

Einzelmandant mit Clientzertifikat

Mit diesen Einstellungen können Sie eine Einzelmandant-Verbindung konfigurieren, die mit einem Client-Zertifikat authentifiziert wird.

Einstellungsname Art Standardwert Beschreibung des Dataflows
CLIENTID Zeichenfolge Kein Wert Die Client-ID (App-ID) der App-Registrierung.
TENANTID Zeichenfolge Kein Wert Die Microsoft Entra ID-Mandanten-ID für die App-Registrierung.
AUTHTYPE Zeichenfolge ClientSecret Der Authentifizierungstyp Legen Sie certificate fest.
CERTPEMFILE Zeichenfolge Kein Wert Pfad zur Privacy-Enhanced Mail (PEM)-Zertifikatsdatei.
CERTKEYFILE Zeichenfolge Kein Wert Pfad zur Datei des privaten Schlüssels für das Zertifikat.
UMFANG Zeichenfolgenliste Kein Wert Standard-Liste von Umfängen zur Anforderung von Tokens.
AUTORITATIVE STELLE Zeichenfolge Kein Wert Wird, sofern vorhanden, als autoritative Stelle zum Anfordern eines Token verwendet.
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=certificate
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={app-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__TENANTID={tenant-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CERTPEMFILE={path-to-pem-file}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CERTKEYFILE={path-to-key-file}

Anmerkung

Das Python SDK liest die PEM-Zertifikats- und privaten Schlüsseldateien direkt von der Festplatte und berechnet den Zertifikatsabdruck automatisch. Die Schlüsseldatei sollte nicht passwortgeschützt sein.

Mehrinstanzenfähigkeit mit Clientzertifikat

Für mehrinstanzfähige Szenarien, die ein Client-Zertifikat verwenden, setzen Sie den Authority Endpoint auf den Mandanten botframework.com:

CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=certificate
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={app-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CERTPEMFILE={path-to-pem-file}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CERTKEYFILE={path-to-key-file}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHORITY=https://login.microsoftonline.com/botframework.com

Verbindungsmanager einrichten

Die Klasse MsalConnectionManager kann mehrere Authentifizierungsverbindungen für Ihren Agenten verwalten. Sie liest die Verbindungskonfigurationen aus und erstellt MsalAuth-Instanzen für jede benannte Verbindung.

Hier ist ein Beispiel, wie man den Verbindungsmanager einrichtet und seinen Agenten startet:

from os import environ

from microsoft_agents.hosting.aiohttp import start_agent_process, CloudAdapter
from microsoft_agents.hosting.core import Authorization, AgentApplication, TurnState, MemoryStorage

from dotenv import load_dotenv
from aiohttp.web import Request, Response, Application, run_app
from microsoft_agents.authentication.msal import MsalConnectionManager
from microsoft_agents.activity import load_configuration_from_env

def start_server(
    agent_application: AgentApplication, auth_configuration: AgentAuthConfiguration
):
    async def entry_point(req: Request) -> Response:
        agent: AgentApplication = req.app["agent_app"]
        adapter: CloudAdapter = req.app["adapter"]
        return await start_agent_process(req, agent, adapter)

    APP = Application()
    APP.router.add_post("/api/messages", entry_point)
    APP["agent_configuration"] = auth_configuration
    APP["agent_app"] = agent_application
    APP["adapter"] = agent_application.adapter

    try:
        run_app(APP, host="localhost", port=environ.get("PORT", 3978))
    except Exception as error:
        raise error

load_dotenv()
agents_sdk_config = load_configuration_from_env(environ)

STORAGE = MemoryStorage()
CONNECTION_MANAGER = MsalConnectionManager(**agents_sdk_config)
ADAPTER = CloudAdapter(connection_manager=CONNECTION_MANAGER)
AUTHORIZATION = Authorization(STORAGE, CONNECTION_MANAGER, **agents_sdk_config)

AGENT_APP = AgentApplication[TurnState](
    storage=STORAGE, adapter=ADAPTER, authorization=AUTHORIZATION, **agents_sdk_config
)

start_server(
    agent_application=AGENT_APP, auth_configuration=CONNECTION_MANAGER.get_default_connection_configuration()
)

Siehe das Python-Quickstart-Beispiel für ein vollständiges Beispiel zur Verwendung von MsalConnectionManager in einem Python-Agenten.

Benutzerdefinierter Authentifizierungsanbieter

Nutzer, die einen angepassten Authentifizierungsanbieter benötigen, können die AccessTokenProviderBase Basisklasse implementieren:

from microsoft_agents.hosting.core import AccessTokenProviderBase

class CustomAuthProvider(AccessTokenProviderBase):
    async def get_access_token(
        self, resource_url: str, scopes: list[str], force_refresh: bool = False
    ) -> str:
        # Implement custom token acquisition logic
        token = await your_custom_token_logic(resource_url, scopes)
        return token

Protokollierungsunterstützung für die Authentifizierung

Das MSAL Authentifizierungssystem verwendet das Standards Python logging Modul unter dem Protokollnamen microsoft_agents.authentication.msal. Um detaillierte Protokollierung von Authentifizierungsabläufen zur Fehlerbehebung bei der Token-Beschaffung zu ermöglichen, konfigurieren Sie den Logger in Ihrer Anwendung:

import logging

logging.basicConfig(level=logging.WARNING)
logging.getLogger("microsoft_agents.authentication.msal").setLevel(logging.DEBUG)

Bewährte Vorgehensweisen zur Sicherheit

  • Speichern Sie Geheimnisse im Azure Key Vault oder in Umgebungsvariablen; checken Sie sie niemals in den Quellcode ein.
  • Setzen Sie nach Möglichkeit verwaltete Identitäten ein, da das Verwalten von Geheimnissen entfällt.
  • Wechseln Sie regelmäßig Clientgeheimnisse und Zertifikate.
  • Verwenden Sie das Prinzip der geringsten Privilegien für Umfänge und Berechtigungen.