Configurer l’authentification dans votre assistant

Une fois vos ressources Azure Bot Service provisionnées, vous pouvez configurer votre assistant pour s’authentifier auprès d’Azure Bot Service. Le Microsoft 365 Agents SDK offre des options flexibles pour la configuration de l’authentification, vous permettant de choisir la méthode qui convient le mieux aux besoins et aux exigences de sécurité de votre application.

Le package MSAL (Microsoft Authentication Library) du SDK des assistants .NET vous fournit des outils qui vous permettent de créer des jetons d’accès pour les clients d’assistant, et les services externes à partir d’un assistant auto-hébergé du Microsoft 365 Agents SDK.

Le package Microsoft.Agents.Athentication.Msal fournit la classe MsalAuth, qui est le fournisseur d’authentification principal. Vous pouvez la configurer pour les types de justificatifs suivants :

  • Locataire unique avec clé secrète client et multilocataire avec clé secrète client
  • Certificat client à l’aide de l’empreinte
  • Certificat client utilisant le nom de l’objet (notamment SN+I)
  • Identité managée affectée par l’utilisateur
  • Identité managée affectée par le système
  • Informations d’identification fédérées
  • Identité de charge de travail

Installer le package d’authentification

Installez le package d’authentification MSAL depuis NuGet :

dotnet add package Microsoft.Agents.Authentication.Msal

Locataire unique vs locataire multiple

L’authentification par clé secrète client prend en charge à la fois les configurations monolocataire et multilocataire.

Note

Dans un environnement multilocataire, vous devez configurer l’instance Azure Bot en tant que multilocataire et l’inscription de l’application Microsoft Entra ID en tant que Comptes dans n’importe quel répertoire d’organisation (n’importe quel locataire Microsoft Entra ID - Multilocataire). Pour en savoir plus, consultez Applications monolocataires et multilocataires.

Configurer une connexion

Le package d’authentification MSAL vous permet de créer et d’utiliser plusieurs clients distincts avec le moteur d’hébergement Agent Framework. Avec le package d’authentification MSAL, vous pouvez fournir plusieurs configurations de connexion dans le fichier de configuration de l’application. Chaque configuration de connexion peut être utilisée pour créer un client d’authentification nommé afin de prendre en charge les communications avec des services externes ou d’autres assistants.

Variables d’environnement pour chaque type d’authentification

L’assistant obtient la configuration MSAL à l’exécution à partir de variables d’environnement.

Les sections suivantes décrivent les paramètres de configuration requis et optionnels pour chacun des types d’authentification pris en charge pour l’authentification MSAL, ainsi que des exemples d’extraits de configuration pour chaque type.

Locataire unique avec clé secrète client

Utilisez ces paramètres pour configurer une connexion monolocataire qui s’authentifie avec une clé secrète client.

Nom du paramètre Type Valeur par défaut Description
ClientId Chaîne Null ClientId (AppId) à utiliser lors de la création du jeton Access.
ClientSecret chaine Null Lorsque AuthType est ClientSecret, Est secret associé au client, cela ne doit être utilisé qu’à des fins de test et de développement.
AuthorityEndpoint Chaîne Null Lorsqu’il est présent, utilisé comme autorité pour demander un jeton.
TenantId Chaîne Null Lorsqu’il est présent et AuthorityEndpoint est null, utilisé pour créer une autorité pour demander un jeton à partir de
Étendues la liste Chaîne Null Listes par défaut d’étendues pour laquelle demander des jetons. Est utilisé uniquement lorsqu’aucune étendue n’est transmise à partir de la demande de connexion de l’assistant

Voici un exemple d’appsettings pour un seul client 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"
          ],
      }
    }
  }

Mutualisé avec clé secrète du client

Utilisez ces paramètres pour configurer une connexion multilocataire qui s’authentifie avec une clé secrète client.

Nom du paramètre Type Valeur par défaut Description
ClientId Chaîne Null ClientId (AppId) à utiliser lors de la création du jeton Access.
ClientSecret chaine Null Lorsque AuthType est ClientSecret, Est secret associé au client, cela ne doit être utilisé qu’à des fins de test et de développement.
AuthorityEndpoint Chaîne Null Lorsqu’il est présent, utilisé comme autorité pour demander un jeton.
TenantId Chaîne Null Lorsqu’il est présent et AuthorityEndpoint est null, utilisé pour créer une autorité pour demander un jeton à partir de
Étendues la liste Chaîne Null Listes par défaut d’étendues pour laquelle demander des jetons. Est utilisé uniquement lorsqu’aucune étendue n’est transmise à partir de la demande de connexion de l’assistant

Voici un exemple de paramètres de configuration pour un environnement multilocataire avec une clé secrète client :

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

Identité managée affectée par l’utilisateur

Utilisez ces paramètres pour configurer l’acquisition de jetons avec une identité managée attribuée par l’utilisateur.

Nom du paramètre Type Valeur par défaut Description
ClientId Chaîne Null Managed Identity ClientId à utiliser lors de la création du jeton Access.

Note

Lorsque vous souhaitez utiliser les types d’identités managées dans votre assistant, vous devez exécuter votre hôte ou client sur un service Azure et configurer ce service avec une identité managée affectée par le système ou une identité managée affectée par l’utilisateur.

Voici un exemple de paramètres d’application pour l’identité managée affectée par l’utilisateur :

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

Identité managée affectée par le système

Lorsque vous utilisez SystemManagedIdentity, l’assistant ignore tout identifiant client fourni et utilise l’identité gérée par le système.

Note

Lorsque vous souhaitez utiliser les types d’identités managées dans votre assistant, vous devez exécuter votre hôte ou client sur un service Azure et configurer ce service avec une identité managée affectée par le système ou une identité managée affectée par l’utilisateur.

Voici un exemple de paramètres d’application pour le type d’authentification de l’identité managée affectée par le système :

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

Informations d’identification fédérées

Utilisez ces paramètres pour configurer une connexion qui échange des identifiants fédérés contre des jetons d’accès.

Nom du paramètre Type Valeur par défaut Description
ClientId Chaîne Null ClientId (AppId) à utiliser lors de la création du jeton Access.
AuthorityEndpoint Chaîne Null Lorsqu’il est présent, utilisé comme autorité pour demander un jeton.
TenantId Chaîne Null Lorsqu’il est présent et AuthorityEndpoint est null, utilisé pour créer une autorité pour demander un jeton à partir de
Étendues la liste Chaîne Null Listes par défaut d’étendues pour laquelle demander des jetons. Est utilisé uniquement lorsqu’aucune étendue n’est transmise à partir de la demande de connexion de l’assistant
FederatedClientId Chaîne Null Managed Identity ClientId à utiliser lors de la création du jeton Access.

Voici un exemple d’appsettings pour 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"
        ]
      }
    }
  }

Identité de charge de travail

Utilisez ces paramètres pour configurer l’authentification par identité de charge de travail à l’aide d’un fichier de jeton fédéré.

Nom du paramètre Type Valeur par défaut Description
ClientId Chaîne Null ClientId (AppId) à utiliser lors de la création du jeton Access.
AuthorityEndpoint Chaîne Null Lorsqu’il est présent, utilisé comme autorité pour demander un jeton.
TenantId Chaîne Null Lorsqu’il est présent et AuthorityEndpoint est null, utilisé pour créer une autorité pour demander un jeton à partir de
Étendues la liste Chaîne Null Listes par défaut d’étendues pour laquelle demander des jetons. Est utilisé uniquement lorsqu’aucune étendue n’est transmise à partir de la demande de connexion de l’assistant
FederatedTokenFile Chaîne Null Fichier de jeton (identique à AKS AZURE_FEDERATED_TOKEN_FILE env var)

Voici un exemple d’appsettings pour un seul client 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"
        ]
      }
    }
  }

Options d’assertion de client d’identité de charge de travail ou d’informations d’identification fédérées facultatives

Utilisez ces paramètres optionnels pour personnaliser le contenu des assertions client pour les identifiants fédérés ou les flux d’identité de charge de travail.

Nom du paramètre Type Valeur par défaut Description
ClientId Chaîne Null ID client pour lequel une assertion signée est demandée
TokenEndpoint Chaîne Null Point de terminaison de jeton prévu
Sinistres Chaîne Null Revendications à inclure dans l’assertion du client
ClientCapabilities Chaîne[] Null Fonctionnalités déclarées par l’application cliente.
  "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,
        }
      }
    }
  }

Certificat utilisant le nom de l’objet (y compris SN+I)

Utilisez ces paramètres pour configurer l’authentification basée sur le certificat par nom du sujet, y compris les scénarios SN+I.

AuthType Type Valeur par défaut Description
AuthorityEndpoint Chaîne Null Lorsqu’il est présent, utilisé comme autorité pour demander un jeton.
TenantId Chaîne Null Lorsqu’il est présent et AuthorityEndpoint est null, utilisé pour créer une autorité pour demander un jeton à partir de
Étendues la liste Chaîne Null Listes par défaut d’étendues pour laquelle demander des jetons. Est utilisé uniquement lorsqu’aucune étendue n’est transmise à partir de la demande de connexion de l’assistant
ClientId Chaîne Null ClientId (AppId) à utiliser lors de la création du jeton Access.
CertSubjectName Chaîne Null Lorsque AuthType est CertificateSubjectName, il s’agit du nom de l’objet recherché
CertStoreName Chaîne « Mon » Lorsque AuthType est CertificateSubjectName ou Certificate, indique le magasin de certificats à rechercher dans
ValidCertificateOnly bool Vrai Nécessite que le certificat dispose d’une chaîne valide.
SendX5C bool Faux Active la rotation automatique des certificats avec la configuration appropriée.

Voici un exemple de fichier appsettings pour un certificat utilisant le nom du sujet pour Subject Name and Issuer (SNI) et le mode multilocataire :

  "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"
        ]
      }
    }
  },

Voici un exemple de fichier appsettings pour le nom de sujet du certificat avec SN+I et locataire unique :

  "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"
        ]
      }
    }
  },

Certificat client à l’aide de l’empreinte

Utilisez ces paramètres pour configurer l’authentification par certificat à l’aide de l’empreinte de certificat.

AuthType Type Valeur par défaut Description
AuthorityEndpoint Chaîne Null Lorsqu’il est présent, utilisé comme autorité pour demander un jeton.
TenantId Chaîne Null Lorsqu’il est présent et AuthorityEndpoint est null, utilisé pour créer une autorité pour demander un jeton à partir de
Étendues la liste Chaîne Null Listes par défaut d’étendues pour laquelle demander des jetons. Est utilisé uniquement lorsqu’aucune étendue n’est transmise à partir de la demande de connexion de l’assistant
ClientId Chaîne Null ClientId (AppId) à utiliser lors de la création du jeton Access.
CertThumbprint Chaîne Null Empreinte du certificat à charger, valide uniquement lorsque AuthType est défini en tant que certificat
CertStoreName Chaîne « Mon » Lorsque AuthType est CertificateSubjectName ou Certificate, indique le magasin de certificats à rechercher dans
ValidCertificateOnly bool Vrai Nécessite que le certificat dispose d’une chaîne valide.
SendX5C bool Faux Active la rotation automatique des certificats avec la configuration appropriée.

Voici un exemple d’appsettings pour certificat à l’aide de l’empreinte du certificat :

  "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"
        ]
      }
    }
  },

Fournisseur de configuration par défaut pour MSAL

Pour faciliter la configuration, nous fournissons une extension de fournisseur de services pour ajouter les paramètres de configuration par défaut pour MSAL à votre assistant.

Voici un exemple de fournisseur de configuration MSAL par défaut pour un hôte principal ASP.NET dans une classe Program.cs :

Ceci est géré par l’instance inscrite IConnections. L’instance IConnections est ajoutée par défaut lorsque vous utilisez AddAgent.

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

Cependant, si vous n’utilisez pas AddAgent, vous devez explicitement enregistrer l’instance IConnections.

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

Plus d’options de configuration MSAL

Il existe plusieurs options de configuration partagée qui contrôlent les paramètres généraux pour l’acquisition de jetons à partir de Microsoft Entra Identity.

Ces paramètres sont les suivants :

Utilisez les paramètres partagés suivants pour contrôler le délai d’expiration des requêtes MSAL, le comportement de réessai et le niveau de détail des journaux.

Nom du paramètre Type Valeur par défaut Description
MSALRequestTimeout TimeSpan 30 secondes Ce paramètre contrôle la durée pendant laquelle le client attend une réponse de Microsoft Entra ID une fois qu’une demande a été envoyée.
MSALRetryCount Entier 3 Ce paramètre contrôle le nombre de nouvelles tentatives effectuées par le fournisseur pour une demande individuelle d’un jeton.
MSALEnabledLogPII Bool Faux Ce paramètre détermine si MSAL fournit à l’enregistreur attaché des données personnelles de données.

Ces paramètres sont partagés avec tous les clients qui créent à l’aide du fournisseur d’authentification MSAL. Ces paramètres sont destinés à être lus à partir d’un lecteur IConfiguration, dans une section de configuration appelée « MSALConfiguration ».

Note

MSALConfiguration est une configuration facultative. Si vous ne définissez pas cette configuration, les configurations par défaut pour ces valeurs sont utilisées.

Voici un exemple d’entrée dans un fichier appsettings.json :

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

Dans ce cas, ce bloc de paramètres indique à tous les clients MSAL créés avec le fournisseur MSAL d’activer la journalisation des données personnelles, de définir le délai d’expiration sur 40 secondes et de réduire le nombre de nouvelles tentatives à 1.

Cette extension recherche une section de configuration nommée « MSALConfiguration » dans votre objet IConfiguration et crée un objet MSAL Configuration à partir de celui-ci.

Si la section MSALConfig est introuvable , elle crée l’objet de configuration MSAL à l’aide de valeurs par défaut.

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

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

Prise en charge de la journalisation pour l’authentification

Le système d’authentification MSAL autorise la journalisation indépendante des flux d’authentification pour l’intégration de télémétrie si vous devez résoudre les problèmes d’acquisition de jetons.

Pour activer la journalisation, ajoutez une entrée pour Microsoft.Agents.Authentication.Msal dans les paramètres de votre application afin de mettre en place un ILogger pour signaler les opérations sur les jetons de vos connexions. Si vous ajoutez cette option MSALEnabledLogPII, cela inclut également les données personnelles de votre connexion.

Voici un exemple de bloc de journalisation dans ce cas :

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

Dans ce cas, la journalisation est activée pour plusieurs modules : Microsoft.Agents.Authentication.Msal, où le niveau de trace est « Trace » pour MSAL.

Le SDK JavaScript requiert un AuthenticationProvider pour obtenir des jetons web JSON (JWT) afin d’envoyer des activités au canal cible. Pour plus d’informations, consultez Jetons d’accès dans la plateforme d’identités Microsoft.

Le package @microsoft/agents-hosting fournit un fournisseur d’authentification par défaut basé sur Microsoft Authentication Library (MSAL). Vous pouvez la configurer pour les types d’authentifications suivants :

  • Locataire unique avec clé secrète client
  • Mutualisé avec clé secrète du client
  • Identité managée par l’utilisateur
  • Identité managée par le système
  • Informations d’identification fédérées
  • Identité de charge de travail
  • Certificat

Installer le package d’authentification

Installez le package d’authentification MSAL depuis npm :

npm install @microsoft/agents-hosting

Locataire unique vs locataire multiple

L’authentification du secret client et du certificat client prend en charge à la fois les configurations monolocataire et multilocataire.

Les identités managées attribuées par l’utilisateur, les identités managées système, les informations d’identification fédérées et l’identité de charge de travail prennent uniquement en charge les configurations à locataire unique.

Note

Dans un environnement multilocataire, vous devez configurer l’instance Azure Bot en tant que multilocataire et l’inscription de l’application Microsoft Entra ID en tant que Comptes dans n’importe quel répertoire d’organisation (n’importe quel locataire Microsoft Entra ID - Multilocataire). Pour en savoir plus, consultez Applications monolocataires et multilocataires.

Configurer une connexion

La bibliothèque d’authentification MSAL vous permet de créer et d’utiliser plusieurs clients distincts avec le moteur d’hébergement Agent Framework. En utilisant la bibliothèque d’authentification MSAL, vous pouvez définir plusieurs configurations de connexion dans le fichier de configuration de l’application. Chaque configuration de connexion peut créer un client d’authentification nommé afin de prendre en charge les communications avec des services externes ou d’autres assistants.

Les sections suivantes décrivent les paramètres de configuration obligatoires et facultatifs pour chacun des types d’authentification pris en charge par le fournisseur d’authentification MSAL. Elles incluent également des exemples d’extraits de configuration pour chaque type.

Variables d’environnement pour chaque type d’authentification

L’assistant obtient la configuration MSAL à l’exécution à partir des variables d’environnement en utilisant la fonction d’assistance loadAuthConfigFromEnv(): AuthConfiguration. Le CloudAdapter s’initialise avec la AuthConfiguration.

Les paramètres de connexion utilisent le format CONNECTIONS__<CONNECTION_NAME>__SETTINGS__<PROPERTY>.

Lorsque AUTHTYPE est présent, le Kit de développement logiciel (SDK) utilise cette valeur pour sélectionner le flux d’acquisition du jeton. Lorsque AUTHTYPE est omis, le Kit de développement logiciel (SDK) revient au comportement hérité et déduit le flux d’authentification à partir des informations d’identification configurées.

Locataire unique avec clé secrète client

Utilisez ces paramètres pour configurer une connexion monolocataire qui s’authentifie avec une clé secrète client.

Nom du paramètre Type Valeur par défaut Description
CLIENTID Chaîne Aucune L’ID client (ID d’application) de l’inscription de l’application.
CLIENTSECRET Chaîne Aucune Secret associé à l’enregistrement de l’application. Adapté uniquement aux fins de test et de développement.
TENANTID Chaîne Aucune ID de client Microsoft Entra ID pour l’inscription de l’application.
AUTHTYPE Chaîne Aucune Réglez sur ClientSecret.
ÉTENDUE Chaîne Aucune Étendue de ressource par défaut utilisée pour demander des jetons lorsqu’aucune n’est fournie par l’appelant.
AUTHORITY Chaîne Aucune Lorsqu’il est présent, utilisé comme autorité pour demander un jeton. Si elle n’est pas définie, la valeur par défaut est 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

La configuration recommandée pour le développement local est une application à locataire unique avec un secret client.

Mutualisé avec clé secrète du client

Pour les scénarios multilocataires utilisant un secret client, définissez le point de terminaison d’autorité sur le locataire botframework.com :

Nom du paramètre Type Valeur par défaut Description
CLIENTID Chaîne Aucune L’ID client (ID d’application) de l’inscription de l’application.
CLIENTSECRET Chaîne Aucune Secret associé à l’enregistrement de l’application. Adapté uniquement aux fins de test et de développement.
AUTHTYPE Chaîne Aucune Réglez sur ClientSecret.
AUTHORITY Chaîne Aucune Définir sur https://login.microsoftonline.com/botframework.com pour le mode multilocataire.
ÉTENDUE Chaîne Aucune Étendue de ressource par défaut utilisée pour demander des jetons lorsqu’aucune n’est fournie par l’appelant.
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

Utilisez ces paramètres pour configurer l’acquisition de jetons avec une identité managée affectée par l’utilisateur.

Nom du paramètre Type Valeur par défaut Description
CLIENTID Chaîne Aucune ID client de l’identité managée à utiliser lors de la création du jeton d’accès.
AUTHTYPE Chaîne Aucune Réglez sur UserManagedIdentity.
ÉTENDUE Chaîne Aucune Étendue de ressource par défaut utilisée pour demander des jetons lorsqu’aucune n’est fournie par l’appelant.
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=UserManagedIdentity
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={managed-identity-client-id}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__SCOPE=https://api.botframework.com

L’identité managée est la configuration recommandée pour les scénarios de production. Pour en savoir plus, consultez Identités managées pour ressources Azure.

Note

Lorsque vous utilisez les types d’identités managées, votre hôte ou client doit s’exécuter avec un service Azure configuré ce service avec une identité managée affectée par le système ou une identité managée affectée par l’utilisateur. Pour voir quels services Azure prennent en charge les identités managées, voir identités managées pour les ressources Azure.

SystemManagedIdentity

Lorsque vous utilisez le type d’authentification SystemManagedIdentity, l’ID client est ignoré et l’identité managée du système pour le service est utilisée.

Nom du paramètre Type Valeur par défaut Description
AUTHTYPE Chaîne Aucune Réglez sur SystemManagedIdentity.
ÉTENDUE Chaîne Aucune Étendue de ressource par défaut utilisée pour demander des jetons lorsqu’aucune n’est fournie par l’appelant.
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=SystemManagedIdentity
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__SCOPE=https://api.botframework.com

Note

Lorsque vous utilisez les types d’identités managées, votre hôte ou client doit s’exécuter avec un service Azure configuré ce service avec une identité managée affectée par le système ou une identité managée affectée par l’utilisateur. Pour voir quels services Azure prennent en charge les identités managées, voir identités managées pour les ressources Azure.

FederatedCredentials

Utilisez ces paramètres pour configurer une application à locataire unique qui s’authentifie via Federated Credentials.

Nom du paramètre Type Valeur par défaut Description
CLIENTID Chaîne Aucune L’ID client (ID d’application) de l’inscription de l’application.
TENANTID Chaîne Aucune ID de client Microsoft Entra ID pour l’inscription de l’application.
AUTHTYPE Chaîne Aucune Réglez sur FederatedCredentials.
AUTHORITY Chaîne Aucune Lorsqu’il est présent, utilisé comme autorité pour demander un jeton. Si elle n’est pas définie, la valeur par défaut est https://login.microsoftonline.com/{TENANTID}.
ÉTENDUE Chaîne Aucune Étendue de ressource par défaut utilisée pour demander des jetons lorsqu’aucune n’est fournie par l’appelant.
FICCLIENTID Chaîne Aucune ID client de l’identité managée utilisée pour obtenir le jeton externe des informations d’identification fédérées.
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

Pour plus d’informations, voir Authentification utilisant les informations d’identification d’identité fédérés.

WorkloadIdentity

Utilisez ces paramètres pour configurer l’acquisition de jetons via l’identité de charge de travail Microsoft Entra.

Nom du paramètre Type Valeur par défaut Description
AUTHTYPE Chaîne Aucune Réglez sur WorkloadIdentity.
CLIENTID Chaîne Aucune L’ID client (ID d’application) de l’inscription de l’application.
TENANTID Chaîne Aucune ID de client Microsoft Entra ID pour l’inscription de l’application.
AUTHORITY Chaîne Aucune Lorsqu’il est présent, utilisé comme autorité pour demander un jeton. Si elle n’est pas définie, la valeur par défaut est https://login.microsoftonline.com/{TENANTID}.
ÉTENDUE Chaîne Aucune Étendue de ressource par défaut utilisée pour demander des jetons lorsqu’aucune n’est fournie par l’appelant.
FEDERATEDTOKENFILE Chaîne Aucune Chemin d’accès au fichier de jeton fédéré fourni par l’environnement d’identité de charge de travail.
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

Locataire unique avec certificat client

Utilisez ces paramètres pour configurer une connexion monolocataire qui s’authentifie avec un certificat client.

Nom du paramètre Type Valeur par défaut Description
CLIENTID Chaîne Aucune L’ID client (ID d’application) de l’inscription de l’application.
TENANTID Chaîne Aucune ID de client Microsoft Entra ID pour l’inscription de l’application.
AUTHTYPE Chaîne Aucune Réglez sur Certificate.
CERTPEMFILE Chaîne Aucune Chemin d’accès vers le fichier de certificat au format PEM (Privacy-Enhanced Mail).
CERTKEYFILE Chaîne Aucune Chemin d’accès au fichier de la clé privée du certificat.
ÉTENDUE Chaîne Aucune Étendue de ressource par défaut utilisée pour demander des jetons lorsqu’aucune n’est fournie par l’appelant.
AUTHORITY Chaîne Aucune Lorsqu’il est présent, utilisé comme autorité pour demander un jeton.
SENDX5C Valeur booléenne Faux Permet d’envoyer l’en-tête x5c lors de l’acquisition de jetons basée sur un certificat.
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

Note

Le Kit de développement logiciel (SDK) JS lit directement les fichiers de certificat PEM et de clé privée depuis le disque et calcule automatiquement l’empreinte du certificat. Le fichier de clé ne doit pas être protégé par un mot de passe.

Multilocataire avec certificat client

Pour les scénarios multilocataires utilisant un certificat client, définissez le point de terminaison d’autorité sur le locataire 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

Rétrocompatibilité avec Azure Bot Framework SDK

Pour charger la configuration en utilisant le même format que l’Azure Bot Framework SDK, utilisez loadPrevAuthConfigFromEnv(): AuthConfiguration.

Utilisez ces noms de paramètres hérités lors de la migration des configurations du Bot Framework SDK.

Nom du paramètre Type Valeur par défaut Description
MicrosoftAppTenantId Chaîne Null L’ID de locataire Microsoft Entra ID (ancien format SDK Bot Framework).
MicrosoftAppId Chaîne Null ID client (ID d’application) de l’inscription d’application (format SDK Bot Framework hérité).
MicrosoftAppPassword Chaîne Null Le secret de l’application (format Bot Framework SDK hérité).
MicrosoftAppTenantId={tenant-id-guid}
MicrosoftAppId={app-id-guid}
MicrosoftAppPassword={app-registration-secret}

Fournisseur d’authentification personnalisé

Les utilisateurs qui ont besoin d’un fournisseur d’authentification personnalisé peuvent implémenter l’interface :

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

Par exemple, implémenter le AuthProvider en utilisant le @azure/identity :

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
  }

Pour instancier le CloudAdapter par l’utilisation de DevTokenProvider

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())

Le package MSAL (Microsoft Authentication Library) d’Agents SDK Python vous fournit des outils qui vous permettent de créer des jetons d’accès pour les clients d’assistant, et les services externes à partir d’un assistant auto-hébergé du Microsoft 365 Agents SDK.

Le package microsoft-agents-authentication-msal fournit la classe MsalAuth, qui est le fournisseur d’authentification principal. Vous pouvez la configurer pour les types de justificatifs suivants :

  • Le secret du client
  • Certificat client
  • Identité managée affectée par l’utilisateur
  • Identité managée affectée par le système

Installer le package d’authentification

Installez le package d’authentification MSAL à partir de PyPI :

pip install microsoft-agents-authentication-msal

Locataire unique vs locataire multiple

L’authentification du secret client et du certificat client prend en charge à la fois les configurations monolocataire et multilocataire.

Les identités managées attribuées par l’utilisateur et les identités managées affectées par le système prennent uniquement en charge les configurations à locataire unique.

Note

Dans un environnement multilocataire, vous devez configurer l’instance Azure Bot en tant que multilocataire et l’inscription de l’application Microsoft Entra ID en tant que Comptes dans n’importe quel répertoire d’organisation (n’importe quel locataire Microsoft Entra ID - Multilocataire). Pour en savoir plus, consultez Applications monolocataires et multilocataires.

Configurer une connexion

La bibliothèque MSAL d’authentification vous permet de créer et d’utiliser plusieurs clients distincts avec le moteur d’hébergement Agent Framework. Chaque configuration de connexion crée un client d’authentification nommé afin de prendre en charge les communications avec des services externes ou d’autres assistants.

Fournir une configuration via des variables d’environnement utilisant la convention d’affectation de noms à double trait de soulignement (__) pour les paramètres imbriqués. La classe MsalConnectionManager lit ces variables pour créer des instances de AgentAuthConfiguration pour chaque connexion nommée.

Important

Le gestionnaire de connexions nécessite au minimum une connexion nommée SERVICE_CONNECTION.

Variables d’environnement pour chaque type d’authentification

L’assistant obtient la configuration MSAL à l’exécution à partir des variables d’environnement en utilisant la fonction d’assistance load_configuration_from_env().

Les sections suivantes décrivent les paramètres de configuration requis pour chacun des types d’authentification pris en charge, ainsi que des exemples de variables d’environnement pour chaque type.

Locataire unique avec clé secrète client

Utilisez ces paramètres pour configurer une connexion monolocataire qui s’authentifie avec une clé secrète client.

Nom du paramètre Type Valeur par défaut Description
CLIENTID Chaîne Aucune L’ID client (ID d’application) de l’inscription de l’application.
CLIENTSECRET Chaîne Aucune Secret associé à l’enregistrement de l’application. Adapté uniquement aux fins de test et de développement.
TENANTID Chaîne Aucune ID de client Microsoft Entra ID pour l’inscription de l’application.
AUTHTYPE Chaîne ClientSecret Type d’authentification. Réglez sur ClientSecret.
ÉTENDUES la liste Chaîne Aucune Liste par défaut d’étendues pour laquelle demander des jetons. Uniquement utilisé lorsqu’aucune étendue n’est transmise à partir de la demande de connexion de l’assistant.
AUTHORITY Chaîne Aucune Lorsqu’il est présent, utilisé comme autorité pour demander un jeton. Si elle n’est pas définie, la valeur par défaut est 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}

La configuration recommandée pour le développement local est une application à locataire unique avec un secret client.

Mutualisé avec clé secrète du client

Pour les scénarios multilocataires utilisant un secret client, définissez le point de terminaison d’autorité sur le locataire botframework.com :

Nom du paramètre Type Valeur par défaut Description
CLIENTID Chaîne Aucune L’ID client (ID d’application) de l’inscription de l’application.
CLIENTSECRET Chaîne Aucune Secret associé à l’enregistrement de l’application. Adapté uniquement aux fins de test et de développement.
AUTHTYPE Chaîne ClientSecret Type d’authentification. Réglez sur ClientSecret.
AUTHORITY Chaîne Aucune Définir sur https://login.microsoftonline.com/botframework.com pour le mode multilocataire.
ÉTENDUES la liste Chaîne Aucune Liste par défaut d’étendues pour laquelle demander des jetons.
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

Identité managée affectée par l’utilisateur

Utilisez ces paramètres pour configurer l’acquisition de jetons avec une identité managée attribuée par l’utilisateur.

Nom du paramètre Type Valeur par défaut Description
CLIENTID Chaîne Aucune ID client de l’identité managée à utiliser lors de la création du jeton d’accès.
AUTHTYPE Chaîne ClientSecret Type d’authentification. Réglez sur UserManagedIdentity.
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={managed-identity-client-id}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=UserManagedIdentity

L’identité managée est la configuration recommandée pour les scénarios de production. Pour en savoir plus, consultez Identités managées pour ressources Azure.

Note

Lorsque vous utilisez les types d’identités managées, votre hôte ou client doit s’exécuter avec un service Azure configuré ce service avec une identité managée affectée par le système ou une identité managée affectée par l’utilisateur. Pour voir quels services Azure prennent en charge les identités managées, voir identités managées pour les ressources Azure.

Identité managée affectée par le système

Lorsque vous utilisez le type d’authentification SystemManagedIdentity, l’ID client est ignoré et l’identité managée du système pour le service est utilisée.

Nom du paramètre Type Valeur par défaut Description
AUTHTYPE Chaîne ClientSecret Type d’authentification. Réglez sur SystemManagedIdentity.
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=SystemManagedIdentity

Note

Lorsque vous utilisez les types d’identités managées, votre hôte ou client doit s’exécuter avec un service Azure configuré ce service avec une identité managée affectée par le système ou une identité managée affectée par l’utilisateur. Pour voir quels services Azure prennent en charge les identités managées, voir identités managées pour les ressources Azure.

Locataire unique avec certificat client

Utilisez ces paramètres pour configurer une connexion monolocataire qui s’authentifie avec un certificat client.

Nom du paramètre Type Valeur par défaut Description
CLIENTID Chaîne Aucune L’ID client (ID d’application) de l’inscription de l’application.
TENANTID Chaîne Aucune ID de client Microsoft Entra ID pour l’inscription de l’application.
AUTHTYPE Chaîne ClientSecret Type d’authentification. Réglez sur certificate.
CERTPEMFILE Chaîne Aucune Chemin d’accès vers le fichier de certificat au format PEM (Privacy-Enhanced Mail).
CERTKEYFILE Chaîne Aucune Chemin d’accès au fichier de la clé privée du certificat.
ÉTENDUES la liste Chaîne Aucune Liste par défaut d’étendues pour laquelle demander des jetons.
AUTHORITY Chaîne Aucune Lorsqu’il est présent, utilisé comme autorité pour demander un jeton.
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}

Note

Le SDK Python lit directement les fichiers de certificat PEM et de clé privée depuis le disque et calcule automatiquement l’empreinte digitale du certificat. Le fichier de clé ne doit pas être protégé par un mot de passe.

Multilocataire avec certificat client

Pour les scénarios multilocataires utilisant un certificat client, définissez le point de terminaison d’autorité sur le locataire 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

Configurer le gestionnaire de connexions

La classe MsalConnectionManager peut gérer plusieurs connexions d’authentification pour votre assistant. Il lit les configurations de connexion et crée des instances MsalAuth pour chaque connexion nommée.

Voici un exemple montrant comment configurer le gestionnaire de connexion et démarrer votre assistant :

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()
)

Voir l’exemple de démarrage rapide Python pour un exemple complet d’utilisation de l’assistant MsalConnectionManager dans un agent Python.

Fournisseur d’authentification personnalisé

Les utilisateurs qui ont besoin d’un fournisseur d’authentification personnalisé peuvent implémenter la classe de base AccessTokenProviderBase :

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

Prise en charge de la journalisation pour l’authentification

Le système d’authentification MSAL utilise le module Python logging standard sous le nom microsoft_agents.authentication.msal de l’enregistreur. Pour permettre une journalisation détaillée des flux d’authentification pour dépanner l’acquisition de jetons, configurez le journal dans votre application :

import logging

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

Meilleures pratiques de sécurité

  • Stocker les secrets dans Azure Key Vault ou les variables d’environnement ; ne jamais les mettre dans le code source.
  • Utilisez des identités managées dans la mesure du possible, car elles éliminent la nécessité de gérer des secrets.
  • Renouvelez régulièrement les clés secrètes client et les certificats.
  • Utilisez le principe du privilège minimum pour les périmètres et les autorisations.