Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le fournisseur d’authentification MSAL (Microsoft Authentication Library) du Kit de développement logiciel (SDK) des assistants .NET est un utilitaire qui vous permet 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.
Cet utilitaire prend en charge plusieurs profils distincts qui peuvent être utilisés pour créer des jetons d’accès. Chaque jeton d’accès peut être créé à l’aide de l’un des types d’authentification suivants :
- Locataire unique avec ClientSecret et Multilocataire avec ClientSecret
- Certificat client à l’aide de l’empreinte
- Certificat client utilisant le nom de l’objet (y compris SN+I)
- 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
Configurer une connexion
Le fournisseur d’authentification MSAL vous permet de créer et d’utiliser plusieurs clients distincts avec le moteur d’hébergement Agent Framework. Par conséquent, le fournisseur d’authentification MSAL permet de fournir plusieurs configurations dans le fichier de configuration de l’application, où chaque configuration peut être utilisée pour créer un client d’authentification nommé pour prendre en charge les communications avec des services externes ou d’autres assistants.
Il existe plusieurs paramètres possibles que vous pouvez utiliser lorsque vous créez une instance du fournisseur d’authentification MSAL.
Ces paramètres sont les suivants :
| Nom de paramètre | Type | Valeur par défaut | Descriptif |
|---|---|---|---|
| Type d'authentification | AuthTypes Enum (Certificate, CertificateSubjectName, ClientSecret, UserManagedIdentity, SystemManagedIdentity, FederatedCredentials, WorkloadIdentity) | ClientSecret | Il s’agit du type d’authentification qui sera créé. |
| AuthorityEndpoint | Chaîne | Zéro | Lorsqu’il est présent, utilisé comme autorité pour demander un jeton. |
| Id de locataire | Chaîne | Zéro | 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 | Zéro | 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 |
Locataire unique avec ClientSecret
| Nom de paramètre | Type | Valeur par défaut | Descriptif |
|---|---|---|---|
| ClientId | Chaîne | Zéro | ClientId (AppId) à utiliser lors de la création du jeton Access. |
| ClientSecret | ficelle | Zéro | 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 | Zéro | Lorsqu’il est présent, utilisé comme autorité pour demander un jeton. |
| Id de locataire | Chaîne | Zéro | 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 | Zéro | 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 d'application pour Locataire uniqueClientSecret pour Azure Bot Service :
"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
| Nom de paramètre | Type | Valeur par défaut | Descriptif |
|---|---|---|---|
| ClientId | Chaîne | Zéro | ClientId (AppId) à utiliser lors de la création du jeton Access. |
| ClientSecret | ficelle | Zéro | 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 | Zéro | Lorsqu’il est présent, utilisé comme autorité pour demander un jeton. |
| Id de locataire | Chaîne | Zéro | 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 | Zéro | 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 d'application pour Partagé au sein d'une architecture mutualiséeClientSecret pour Azure Bot Service :
"Connections": {
"ServiceConnection": {
"Settings": {
"AuthType": "ClientSecret",
"ClientId": "{{BOT_ID}}",
"ClientSecret": "{{BOT_SECRET}}",
"AuthorityEndpoint": "https://login.microsoftonline.com/botframework.com",
"Scopes": [
"https://api.botframework.com/.default"
],
}
}
}
UserManagedIdentity
| Nom de paramètre | Type | Valeur par défaut | Descriptif |
|---|---|---|---|
| ClientId | Chaîne | Zéro | Managed Identity ClientId à utiliser lors de la création du jeton Access. |
Lorsque vous utilisez les types d’identité managée, votre hôte ou client doit s’exécuter avec un service Azure et doit avoir configuré 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 d’appsettings pour UserManagedIdentity :
"Connections": {
"ServiceConnection": {
"Settings": {
"AuthType": "UserManagedIdentity",
"ClientId": "{{BOT_ID}}",
"Scopes": [
"https://api.botframework.com/.default"
]
}
}
}
SystemManagedIdentity
Lorsque vous utilisez le type Auth SystemManagedIdentity, l’ID client est ignoré et l’identité managée du système pour le service est utilisée.
Lorsque vous utilisez les types d’identité managée, votre hôte ou client doit s’exécuter avec un service Azure et doit avoir configuré 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 d’appsettings pour le type d’authentification SystemManagedIdentity :
"Connections": {
"ServiceConnection": {
"Settings": {
"AuthType": "SystemManagedIdentity",
"Scopes": [
"https://api.botframework.com/.default"
]
}
}
}
FederatedCredentials
| Nom de paramètre | Type | Valeur par défaut | Descriptif |
|---|---|---|---|
| ClientId | Chaîne | Zéro | ClientId (AppId) à utiliser lors de la création du jeton Access. |
| AuthorityEndpoint | Chaîne | Zéro | Lorsqu’il est présent, utilisé comme autorité pour demander un jeton. |
| Id de locataire | Chaîne | Zéro | 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 | Zéro | 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 | Zéro | Managed Identity ClientId à utiliser lors de la création du jeton Access. |
Voici un exemple d’appsettings pour FederatedCredentials :
"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"
]
}
}
}
WorkloadIdentity
| Nom de paramètre | Type | Valeur par défaut | Descriptif |
|---|---|---|---|
| ClientId | Chaîne | Zéro | ClientId (AppId) à utiliser lors de la création du jeton Access. |
| AuthorityEndpoint | Chaîne | Zéro | Lorsqu’il est présent, utilisé comme autorité pour demander un jeton. |
| Id de locataire | Chaîne | Zéro | 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 | Zéro | 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 | Zéro | Fichier de jeton (identique à AKS AZURE_FEDERATED_TOKEN_FILE env var) |
Voici un exemple pour Locataire uniqueWorkloadIdentity :
"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
| Nom de paramètre | Type | Valeur par défaut | Descriptif |
|---|---|---|---|
| ClientId | Chaîne | Zéro | ID client pour lequel une assertion signée est demandée |
| TokenEndpoint | Chaîne | Zéro | Point de terminaison de jeton prévu |
| Réclamations | Chaîne | Zéro | Revendications à inclure dans l’assertion du client |
| ClientCapabilities | Chaîne[] | Zéro | 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,
}
}
}
}
CertificateSubjectName
| Type d'authentification | Type | Valeur par défaut | Descriptif |
|---|---|---|---|
| AuthorityEndpoint | Chaîne | Zéro | Lorsqu’il est présent, utilisé comme autorité pour demander un jeton. |
| Id de locataire | Chaîne | Zéro | 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 | Zéro | 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 | Zéro | ClientId (AppId) à utiliser lors de la création du jeton Access. |
| CertSubjectName | Chaîne | Zéro | 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 d’appsettings pour CertificateSubjectName SN+I et Partagé au sein d'une architecture mutualisée
"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 d’appsettings pour CertificateSubjectName 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
| Type d'authentification | Type | Valeur par défaut | Descriptif |
|---|---|---|---|
| AuthorityEndpoint | Chaîne | Zéro | Lorsqu’il est présent, utilisé comme autorité pour demander un jeton. |
| Id de locataire | Chaîne | Zéro | 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 | Zéro | 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 | Zéro | ClientId (AppId) à utiliser lors de la création du jeton Access. |
| CertThumbprint | Chaîne | Zéro | 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 CertificateSubjectName à 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. Cette opération est ajoutée par défaut lors de l’utilisation de AddAgent.
// Register your AgentApplication
builder.AddAgent<MyAgent>();
Toutefois, si elle n’est pas utilisée AddAgent, l’instance IConnections doit être inscrite.
// Add Connections object to access configured token connections.
builder.Services.AddSingleton<IConnections, ConfigurationConnections>();
Options de configuration MSAL supplémentaires
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 :
| Nom de paramètre | Type | Valeur par défaut | Descriptif |
|---|---|---|---|
| MSALRequestTimeout | TimeSpan | 30 secondes | Ce paramètre contrôle la durée pendant laquelle le client attend une réponse de l’Entra ID une fois qu’une demande a été effectué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 contrôle si l’enregistreur d’événements attaché est fourni avec des données d’identification personnelle à partir de MSAL |
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 ».
La configuration MSAL est une configuration facultative, si elle n’est pas définie ou fournie, la configuration par défaut de ces valeurs est utilisée.
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 informations 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, vous devez ajouter une entrée pour Microsoft.Agents.Authentication.Msal à vos paramètres d’application appsettings pour configurer un ILogger afin de signaler les opérations de jeton pour vos connexions, si vous avez ajouté l’option MSALEnabledLogPII, cela inclut également des informations d’identification personnelles pour 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.