Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Una vez que haya aprovisionado sus recursos de Azure Bot Service, puede configurar su agente para que se autentique con Azure Bot Service. El SDK de agentes de Microsoft 365 ofrece opciones flexibles para la configuración de autenticación, lo que le permite elegir el método que mejor se adapte a las necesidades y requisitos de seguridad de su aplicación.
El paquete de la Biblioteca de autenticación de Microsoft (MSAL) del SDK de agentes de .NET le proporciona herramienta que le ayuda a crear tokens de acceso para clientes de agente y servicios externos desde un agente autohospedado del SDK de Microsoft 365 Agents.
El paquete Microsoft.Agents.Athentication.Msal proporciona la clase MsalAuth, que es el proveedor de autenticación principal. Puede configurarlo para los siguientes tipos de credenciales:
- Inquilino único con secreto de cliente y multiinquilino con secreto de cliente
- Certificado de cliente mediante huella digital
- Certificado de cliente mediante el nombre del asunto (incluido SN+I)
- Identidad administrada asignada a usuario
- Identidad administrada asignada por el sistema
- Credenciales federadas
- Identidad de carga de trabajo
Instalar el paquete de autenticación
Instale el paquete de autenticación MSAL desde NuGet:
dotnet add package Microsoft.Agents.Authentication.Msal
Inquilino único frente a multiempresa
La autenticación con secreto de cliente admite configuraciones tanto de inquilino único como de varios inquilinos.
Nota
Para multiempresa, debe configurar la instancia de Azure Bot como multiempresa y el registro de la aplicación Microsoft Entra ID como Cuentas en cualquier directorio organizativo (Cualquier inquilino de Microsoft Entra ID: multiempresa). Para obtener más información, consulte Aplicaciones de un solo inquilino y multiempresa.
Configurar una conexión de
El paquete de autenticación MSAL permite crear y usar varios clientes distintos con el motor de hospedaje de Agents Framework. Con el paquete de autenticación MSAL, se pueden definir varios configuraciones de conexión en el archivo de configuración de la aplicación. Cada configuración de conexión puede usarse para crear un cliente de autenticación con nombre que permita comunicaciones con servicios externos u otros agentes.
Variables de entorno para cada tipo de autenticación
El agente obtiene la configuración de MSAL en tiempo de ejecución a partir de variables de entorno.
A continuación se describen las configuraciones obligatorias y opcionales para cada uno de los tipos de autenticación compatibles con MSAL, junto con ejemplos de fragmentos de configuración para cada tipo.
Inquilino único con secreto de cliente
Utilice estos parámetros para establecer una conexión de inquilino único que se autentique con un secreto de cliente.
| Nombre de la configuración | Tipo | Valor predeterminado | Description |
|---|---|---|---|
| ClientId | Cadena | Nulo | ClientId (AppId) que se usará al crear el token de acceso. |
| ClientSecret | cadena | Nulo | Cuando AuthType es ClientSecret, Is Secret asociado al cliente, solo se debe usar con fines de prueba y desarrollo. |
| AuthorityEndpoint | Cadena | Nulo | Cuando está presente, se usa como autoridad para solicitar un token. |
| TenantId | Cadena | Nulo | Cuando present y AuthorityEndpoint son NULL, se usa para crear una entidad para solicitar un token |
| Ámbitos | Lista de cadenas | Nulo | Listas predeterminadas de ámbitos para los que solicitar tokens. Solo se usa cuando no se pasan ámbitos desde la solicitud de conexión del agente |
Este es un ejemplo de appsettings para único inquilino 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"
],
}
}
}
Multiempresa con secreto de cliente
Utilice estos parámetros de configuración para establecer una conexión multiinquilino que utiliza un secreto de cliente para autenticarse.
| Nombre de la configuración | Tipo | Valor predeterminado | Description |
|---|---|---|---|
| ClientId | Cadena | Nulo | ClientId (AppId) que se usará al crear el token de acceso. |
| ClientSecret | cadena | Nulo | Cuando AuthType es ClientSecret, Is Secret asociado al cliente, solo se debe usar con fines de prueba y desarrollo. |
| AuthorityEndpoint | Cadena | Nulo | Cuando está presente, se usa como autoridad para solicitar un token. |
| TenantId | Cadena | Nulo | Cuando present y AuthorityEndpoint son NULL, se usa para crear una entidad para solicitar un token |
| Ámbitos | Lista de cadenas | Nulo | Listas predeterminadas de ámbitos para los que solicitar tokens. Solo se usa cuando no se pasan ámbitos desde la solicitud de conexión del agente |
Aquí tiene un ejemplo de appsettings para multiempresa con secreto de cliente:
"Connections": {
"ServiceConnection": {
"Settings": {
"AuthType": "ClientSecret",
"ClientId": "{{BOT_ID}}",
"ClientSecret": "{{BOT_SECRET}}",
"AuthorityEndpoint": "https://login.microsoftonline.com/botframework.com",
"Scopes": [
"https://api.botframework.com/.default"
],
}
}
}
Identidad administrada asignada a usuario
Utilice estos parámetros para configurar la adquisición de tokens con una identidad administrada asignada por el usuario.
| Nombre de la configuración | Tipo | Valor predeterminado | Description |
|---|---|---|---|
| ClientId | Cadena | Nulo | Managed Identity ClientId que se usará al crear el token de acceso. |
Nota
Cuando quiera usar los tipos de identidad administrada en su agente, debe ejecutar su host o cliente en un servicio de Azure y haber configurado ese servicio con una identidad administrada asignada por el sistema o una identidad administrada asignada por el usuario.
Este es un ejemplo de appsettings para Identidad administrada asignada por el usuario:
"Connections": {
"ServiceConnection": {
"Settings": {
"AuthType": "UserManagedIdentity",
"ClientId": "{{BOT_ID}}",
"Scopes": [
"https://api.botframework.com/.default"
]
}
}
}
Identidad administrada asignada por el sistema
Cuando usa SystemManagedIdentity, el agente ignora cualquier id. de cliente proporcionado y utiliza la identidad administrada por el sistema.
Nota
Cuando quiera usar los tipos de identidad administrada en su agente, debe ejecutar su host o cliente en un servicio de Azure y haber configurado ese servicio con una identidad administrada asignada por el sistema o una identidad administrada asignada por el usuario.
Este es un ejemplo de appsettings para el tipo de autenticación de identidad administrada System-Assigned:
"Connections": {
"ServiceConnection": {
"Settings": {
"AuthType": "SystemManagedIdentity",
"Scopes": [
"https://api.botframework.com/.default"
]
}
}
}
Credenciales federadas
Utilice estos parámetros para configurar una conexión que intercambie credenciales federadas por tokens de acceso.
| Nombre de la configuración | Tipo | Valor predeterminado | Description |
|---|---|---|---|
| ClientId | Cadena | Nulo | ClientId (AppId) que se usará al crear el token de acceso. |
| AuthorityEndpoint | Cadena | Nulo | Cuando está presente, se usa como autoridad para solicitar un token. |
| TenantId | Cadena | Nulo | Cuando present y AuthorityEndpoint son NULL, se usa para crear una entidad para solicitar un token |
| Ámbitos | Lista de cadenas | Nulo | Listas predeterminadas de ámbitos para los que solicitar tokens. Solo se usa cuando no se pasan ámbitos desde la solicitud de conexión del agente |
| FederatedClientId | Cadena | Nulo | Managed Identity ClientId que se usará al crear el token de acceso. |
Este es un ejemplo de appsettings para 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"
]
}
}
}
Identidad de carga de trabajo
Utilice estas opciones para configurar la autenticación de identidad de carga de trabajo mediante un archivo de token federado.
| Nombre de la configuración | Tipo | Valor predeterminado | Description |
|---|---|---|---|
| ClientId | Cadena | Nulo | ClientId (AppId) que se usará al crear el token de acceso. |
| AuthorityEndpoint | Cadena | Nulo | Cuando está presente, se usa como autoridad para solicitar un token. |
| TenantId | Cadena | Nulo | Cuando present y AuthorityEndpoint son NULL, se usa para crear una entidad para solicitar un token |
| Ámbitos | Lista de cadenas | Nulo | Listas predeterminadas de ámbitos para los que solicitar tokens. Solo se usa cuando no se pasan ámbitos desde la solicitud de conexión del agente |
| FederatedTokenFile | Cadena | Nulo | El archivo de token (igual que AKS AZURE_FEDERATED_TOKEN_FILE env var) |
Este es un ejemplo de appsettings para único inquilino 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"
]
}
}
}
Opciones opcionales de aserción de cliente de credenciales federadas o identidad de carga de trabajo
Utilice estas opciones opcionales para personalizar el contenido de la aserción del cliente en los flujos de credenciales federadas o identidad de carga de trabajo.
| Nombre de la configuración | Tipo | Valor predeterminado | Description |
|---|---|---|---|
| ClientId | Cadena | Nulo | Identificador de cliente para el que se solicita una aserción firmada |
| TokenEndpoint | Cadena | Nulo | Punto de conexión del token previsto |
| Reclamaciones | Cadena | Nulo | Notificaciones que se incluirán en la aserción de cliente |
| ClientCapabilities | Cadena[] | Nulo | Funcionalidades que la aplicación cliente declara. |
"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,
}
}
}
}
Certificado mediante el nombre del asunto (incluido SN+I)
Utilice estos ajustes para configurar la autenticación basada en certificados por nombre del asunto, incluidos los escenarios SN+I.
| AuthType | Tipo | Valor predeterminado | Description |
|---|---|---|---|
| AuthorityEndpoint | Cadena | Nulo | Cuando está presente, se usa como autoridad para solicitar un token. |
| TenantId | Cadena | Nulo | Cuando present y AuthorityEndpoint son NULL, se usa para crear una entidad para solicitar un token |
| Ámbitos | Lista de cadenas | Nulo | Listas predeterminadas de ámbitos para los que solicitar tokens. Solo se usa cuando no se pasan ámbitos desde la solicitud de conexión del agente |
| ClientId | Cadena | Nulo | ClientId (AppId) que se usará al crear el token de acceso. |
| CertSubjectName | Cadena | Nulo | Cuando AuthType es CertificateSubjectName, este es el nombre del firmante que se busca |
| CertStoreName | Cadena | "Mi" | Cuando AuthType es CertificateSubjectName o Certificate, indica en qué almacén de certificados se va a buscar |
| ValidCertificateOnly | bool | VERDADERO | Requiere que el certificado tenga una cadena válida. |
| SendX5C | bool | Falso | Habilita la rotación automática de certificados con la configuración adecuada. |
Este es un ejemplo de appsettings para un certificado que usa el nombre del sujeto para Nombre de asunto y emisor (SNI) y para varios inquilinos:
"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"
]
}
}
},
Aquí tiene un ejemplo de appsettings para el nombre del sujeto del certificado para SN+I y un solo inquilino:
"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"
]
}
}
},
Certificado de cliente mediante huella digital
Utilice estos ajustes para configurar la autenticación basada en certificados mediante la huella digital del certificado.
| AuthType | Tipo | Valor predeterminado | Description |
|---|---|---|---|
| AuthorityEndpoint | Cadena | Nulo | Cuando está presente, se usa como autoridad para solicitar un token. |
| TenantId | Cadena | Nulo | Cuando present y AuthorityEndpoint son NULL, se usa para crear una entidad para solicitar un token |
| Ámbitos | Lista de cadenas | Nulo | Listas predeterminadas de ámbitos para los que solicitar tokens. Solo se usa cuando no se pasan ámbitos desde la solicitud de conexión del agente |
| ClientId | Cadena | Nulo | ClientId (AppId) que se usará al crear el token de acceso. |
| CertThumbprint | Cadena | Nulo | Huella digital del certificado que se va a cargar, solo válida cuando AuthType se establece como certificado |
| CertStoreName | Cadena | "Mi" | Cuando AuthType es CertificateSubjectName o Certificate, indica en qué almacén de certificados se va a buscar |
| ValidCertificateOnly | bool | VERDADERO | Requiere que el certificado tenga una cadena válida. |
| SendX5C | bool | Falso | Habilita la rotación automática de certificados con la configuración adecuada. |
Este es un ejemplo de appsettings para el certificado usando la huella digital del certificado:
"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"
]
}
}
},
Proveedor de configuración predeterminado para MSAL
Para facilitar la configuración, proporcionamos una extensión del proveedor de servicios para agregar las opciones de configuración predeterminadas de MSAL al agente.
Este es un ejemplo del proveedor de configuración de MSAL predeterminado para un host principal de ASP.NET en una clase Program.cs.
Esto se administra mediante la instancia registrada IConnections. De manera predeterminada, se agrega la instancia de IConnections cuando usa AddAgent.
// Register your AgentApplication
builder.AddAgent<MyAgent>();
Sin embargo, si no está usando AddAgent, tiene que registrar explícitamente la instancia de IConnections.
// Add Connections object to access configured token connections.
builder.Services.AddSingleton<IConnections, ConfigurationConnections>();
Más opciones de configuración de MSAL
Hay varias opciones de configuración compartidas que controlan la configuración general para adquirir tokens de Microsoft Entra Identity.
Estos valores son:
Utilice las siguientes configuraciones compartidas para controlar el tiempo de espera de las solicitudes MSAL, el comportamiento de reintentos y el nivel de detalle del registro.
| Nombre de la configuración | Tipo | Valor predeterminado | Description |
|---|---|---|---|
| MSALRequestTimeout | TimeSpan | 30segundos | Esta configuración controla cuánto tiempo esperará el cliente para una respuesta de Microsoft Entra ID después de enviar una solicitud. |
| MSALRetryCount | Int | 3 | Esta configuración controla cuántos intentos de reintento realizará el proveedor realiza para una solicitud individual de un token. |
| MSALEnabledLogPII | Bool | Falso | Esta configuración controla si MSAL proporciona al registrador adjunto datos personales. |
Esta configuración se comparte con todos los clientes que crean mediante el proveedor de autenticación msal.
Estas opciones están pensadas para leerse desde un lector de IConfiguration, en una sección de configuración, una sección denominada "MSALConfiguration".
Nota
MSALConfiguration es una configuración opcional. Si no configura esta configuración, se usan las configuraciones predeterminadas para estos valores.
Este es un ejemplo de la entrada en un archivo appsettings.json:
{
"MSALConfiguration": {
"MSALEnabledLogPII": "true",
"MSALRequestTimeout": "00:00:40",
"MSALRetryCount": "1"
},
}
En este caso, este bloque de configuración indicaría a todos los clientes MSAL creados con el proveedor MSAL que habilitaran el registro de datos personales, establecerían el tiempo de espera en 40 segundos y reducirían el número de reintentos a 1.
Esta extensión busca una sección de configuración denominada "MSALConfiguration" en su objeto IConfiguration y crea un objeto de configuración de MSAL a partir de él.
Si no se encuentra la sección MSALConfig, crea el objeto de configuración de MSAL con valores predeterminados.
// Add default agent MsalAuth support
builder.Services.AddDefaultMsalAuth(builder.Configuration);
// Register your AgentApplication
builder.AddAgent<MyAgent>();
Compatibilidad con el registro para la autenticación
El sistema de autenticación MSAL permite el registro independiente de flujos de autenticación para la integración de telemetría si necesita solucionar problemas de adquisición de tokens.
Para habilitar el registro, agregue una entrada para Microsoft.Agents.Authentication.Msal en la configuración de la aplicación para configurar un ILogger que notifique las operaciones de tokens de sus conexiones. Si agrega la opción MSALEnabledLogPII, esto también incluye datos personales de su conexión.
Este es un ejemplo del bloque de registro en este caso:
"Logging": {
"LogLevel": {
"Default": "Warning",
"Microsoft.Agents": "Warning",
"Microsoft.Hosting.Lifetime": "Information",
"Microsoft.Agents.Authentication.Msal": "Trace"
}
}
En este caso, el registro está habilitado para varios módulos, como Microsoft.Agents.Authentication.Msal, donde el nivel de seguimiento es "Seguimiento" para MSAL.
El SDK de JavaScript requiere un AuthenticationProvider para obtener JSON Web Tokens (JWT) y enviar actividades al canal objetivo. Para obtener más información, consulte Tokens de acceso de la plataforma de identidad de Microsoft.
El paquete @microsoft/agents-hosting proporciona un proveedor de autenticación predeterminado basado en la Biblioteca de autenticación de Microsoft (MSAL). Puede configurarlo para los siguientes tipos de autenticación:
- Inquilino único con secreto de cliente
- Multiempresa con secreto de cliente
- Identidad administrada del usuario
- Identidad administrada del sistema
- Credenciales federadas
- Identidad de carga de trabajo
- Certificado
Instalar el paquete de autenticación
Instale el paquete de autenticación MSAL usando npm:
npm install @microsoft/agents-hosting
Inquilino único frente a multiempresa
La autenticación mediante secreto de cliente y certificado de cliente admite configuraciones de inquilino único y multiempresa.
User Assigned Managed Identity, System Managed Identity, Federated Credentials y Workload Identity solo admiten configuraciones de inquilino único.
Nota
Para multiempresa, debe configurar la instancia de Azure Bot como multiempresa y el registro de la aplicación Microsoft Entra ID como Cuentas en cualquier directorio organizativo (Cualquier inquilino de Microsoft Entra ID: multiempresa). Para obtener más información, consulte Aplicaciones de un solo inquilino y multiempresa.
Configurar una conexión de
La biblioteca de autenticación MSAL le permite crear y usar varios clientes distintos con el motor de hospedaje de Agents Framework. Utilizando la biblioteca de autenticación MSAL, se pueden proporcionar múltiples configuraciones de conexión en el archivo de configuración de la aplicación. Cada configuración de conexión puede crear un cliente de autenticación con nombre para facilitar las comunicaciones con servicios externos u otros agentes.
Las siguientes secciones describen los parámetros de configuración requeridos y opcionales para cada uno de los tipos de autenticación admitidos por el proveedor de autenticación MSAL. También incluyen ejemplos de fragmentos de configuración para cada tipo.
Variables de entorno para cada tipo de autenticación
El agente obtiene la configuración de MSAL en tiempo de ejecución desde variables de entorno utilizando la función auxiliar loadAuthConfigFromEnv(): AuthConfiguration. El CloudAdapter se inicializa con el AuthConfiguration.
La configuración de conexión utiliza el formato CONNECTIONS__<CONNECTION_NAME>__SETTINGS__<PROPERTY>.
Cuando AUTHTYPE está presente, el SDK utiliza ese valor para seleccionar el flujo de adquisición del token. Cuando se omite AUTHTYPE, el SDK vuelve al comportamiento heredado e infiere el flujo de autenticación a partir de las propiedades configuradas de la credencial.
Inquilino único con secreto de cliente
Utilice estos parámetros para establecer una conexión de inquilino único que se autentique con un secreto de cliente.
| Nombre de la configuración | Tipo | Valor predeterminado | Description |
|---|---|---|---|
| CLIENTID | Cadena | Nada | El id. de cliente (id. de aplicación) del registro de aplicaciones. |
| CLIENTSECRET | Cadena | Nada | El secreto asociado al registro de la aplicación. Use solo con fines de prueba y desarrollo. |
| TENANTID | Cadena | Nada | El id. de inquilino de Microsoft Entra ID para el registro de la aplicación. |
| AUTHTYPE | Cadena | Nada | Cámbielo a ClientSecret. |
| SCOPE | Cadena | Nada | Alcance de recurso predeterminado para solicitar tokens cuando no se proporciona uno por parte del autor de la llamada. |
| AUTHORITY | Cadena | Nada | Cuando está presente, se usa como autoridad para solicitar un token. Si no se establece, el valor predeterminado es 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 configuración recomendada para el desarrollo local es un único inquilino con secreto del cliente.
Multiempresa con secreto de cliente
Para escenarios multiempresas que usan un secreto de cliente, establezca el punto de conexión de la autoridad en el inquilino botframework.com:
| Nombre de la configuración | Tipo | Valor predeterminado | Description |
|---|---|---|---|
| CLIENTID | Cadena | Nada | El id. de cliente (id. de aplicación) del registro de aplicaciones. |
| CLIENTSECRET | Cadena | Nada | El secreto asociado al registro de la aplicación. Use solo con fines de prueba y desarrollo. |
| AUTHTYPE | Cadena | Nada | Cámbielo a ClientSecret. |
| AUTHORITY | Cadena | Nada | Establézcalo en https://login.microsoftonline.com/botframework.com para multiempresa. |
| SCOPE | Cadena | Nada | Alcance de recurso predeterminado para solicitar tokens cuando no se proporciona uno por parte del autor de la llamada. |
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
Utilice estos ajustes para configurar la adquisición de tokens con una identidad administrada asignada por el usuario
| Nombre de la configuración | Tipo | Valor predeterminado | Description |
|---|---|---|---|
| CLIENTID | Cadena | Nada | El Id. de cliente de identidad administrada que se usará al crear el token de acceso. |
| AUTHTYPE | Cadena | Nada | Cámbielo a UserManagedIdentity. |
| SCOPE | Cadena | Nada | Alcance de recurso predeterminado para solicitar tokens cuando no se proporciona uno por parte del autor de la llamada. |
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=UserManagedIdentity
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={managed-identity-client-id}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__SCOPE=https://api.botframework.com
Identidad administrada es la configuración recomendada para escenarios de producción. Para más información, consulte Identidades administradas para recursos de Azure.
Nota
Si usa tipos de identidad administrada, el host o el cliente deben ejecutarse en un servicio de Azure configurado con una identidad administrada asignada por el sistema o asignada por el usuario. Para ver qué servicios de Azure admiten identidades administradas, consulte Identidades administradas para recursos de Azure.
SystemManagedIdentity
Si usa el tipo de autenticación SystemManagedIdentity, se omite el id. de cliente y se usa la identidad administrada del sistema para el servicio.
| Nombre de la configuración | Tipo | Valor predeterminado | Description |
|---|---|---|---|
| AUTHTYPE | Cadena | Nada | Cámbielo a SystemManagedIdentity. |
| SCOPE | Cadena | Nada | Alcance de recurso predeterminado para solicitar tokens cuando no se proporciona uno por parte del autor de la llamada. |
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=SystemManagedIdentity
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__SCOPE=https://api.botframework.com
Nota
Si usa tipos de identidad administrada, el host o el cliente deben ejecutarse en un servicio de Azure configurado con una identidad administrada asignada por el sistema o asignada por el usuario. Para ver qué servicios de Azure admiten identidades administradas, consulte Identidades administradas para recursos de Azure.
FederatedCredentials
Utilice estos ajustes para configurar una aplicación de un solo inquilino que se autentique mediante credenciales federadas.
| Nombre de la configuración | Tipo | Valor predeterminado | Description |
|---|---|---|---|
| CLIENTID | Cadena | Nada | El id. de cliente (id. de aplicación) del registro de aplicaciones. |
| TENANTID | Cadena | Nada | El id. de inquilino de Microsoft Entra ID para el registro de la aplicación. |
| AUTHTYPE | Cadena | Nada | Cámbielo a FederatedCredentials. |
| AUTHORITY | Cadena | Nada | Cuando está presente, se usa como autoridad para solicitar un token. Si no se establece, el valor predeterminado es https://login.microsoftonline.com/{TENANTID}. |
| SCOPE | Cadena | Nada | Alcance de recurso predeterminado para solicitar tokens cuando no se proporciona uno por parte del autor de la llamada. |
| FICCLIENTID | Cadena | Nada | Identificador de cliente de la identidad administrada usado para obtener el token externo para las credenciales federadas. |
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
Para más información, consulte Autenticación mediante credenciales de identidad federada.
WorkloadIdentity
Use estos ajustes para configurar la adquisición de tokens a través de la identidad de carga de trabajo de Microsoft Entra.
| Nombre de la configuración | Tipo | Valor predeterminado | Description |
|---|---|---|---|
| AUTHTYPE | Cadena | Nada | Cámbielo a WorkloadIdentity. |
| CLIENTID | Cadena | Nada | El id. de cliente (id. de aplicación) del registro de aplicaciones. |
| TENANTID | Cadena | Nada | El id. de inquilino de Microsoft Entra ID para el registro de la aplicación. |
| AUTHORITY | Cadena | Nada | Cuando está presente, se usa como autoridad para solicitar un token. Si no se establece, el valor predeterminado es https://login.microsoftonline.com/{TENANTID}. |
| SCOPE | Cadena | Nada | Alcance de recurso predeterminado para solicitar tokens cuando no se proporciona uno por parte del autor de la llamada. |
| FEDERATEDTOKENFILE | Cadena | Nada | Ruta de acceso al archivo de token federado proporcionado por el entorno de identidad de carga de trabajo. |
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
Inquilino único con certificado de cliente
Utilice estos parámetros para establecer una conexión de inquilino único que se autentique con un certificado de cliente.
| Nombre de la configuración | Tipo | Valor predeterminado | Description |
|---|---|---|---|
| CLIENTID | Cadena | Nada | El id. de cliente (id. de aplicación) del registro de aplicaciones. |
| TENANTID | Cadena | Nada | El id. de inquilino de Microsoft Entra ID para el registro de la aplicación. |
| AUTHTYPE | Cadena | Nada | Cámbielo a Certificate. |
| CERTPEMFILE | Cadena | Nada | Ruta al archivo de certificado PEM (Privacy-Enhanced Mail). |
| CERTKEYFILE | Cadena | Nada | Ruta de acceso al archivo de clave privada del certificado. |
| SCOPE | Cadena | Nada | Alcance de recurso predeterminado para solicitar tokens cuando no se proporciona uno por parte del autor de la llamada. |
| AUTHORITY | Cadena | Nada | Cuando está presente, se usa como autoridad para solicitar un token. |
| SENDX5C | Booleana | Falso | Habilita el envío del encabezado x5c durante la adquisición de tokens basada en certificados. |
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
Nota
El SDK de JavaScript lee directamente el certificado PEM y el archivo de clave privada desde el disco y calcula automáticamente la huella digital del certificado. El archivo de clave no debe usar contraseña.
Multiempresa con certificado de cliente
Para escenarios multiempresas que usan un certificado de cliente, establezca el punto de conexión de la autoridad en el inquilino 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
Compatibilidad con versiones anteriores con SDK de Azure Bot Framework
Para cargar la configuración utilizando el mismo formato que el SDK de Azure Bot Framework, utilice loadPrevAuthConfigFromEnv(): AuthConfiguration.
Utiliza estos nombres de configuración heredados al migrar configuraciones existentes del SDK de Bot Framework.
| Nombre de la configuración | Tipo | Valor predeterminado | Description |
|---|---|---|---|
| MicrosoftAppTenantId | Cadena | Nulo | Identificador de Id. de tenant de Microsoft Entra ID (formato heredado del SDK de Bot Framework). |
| MicrosoftAppId | Cadena | Nulo | El id. de cliente (id. de la aplicación) del registro de la aplicación (formato heredado del SDK de Bot Framework). |
| MicrosoftAppPassword | Cadena | Nulo | El secreto de la app (formato heredado del SDK del Bot Framework). |
MicrosoftAppTenantId={tenant-id-guid}
MicrosoftAppId={app-id-guid}
MicrosoftAppPassword={app-registration-secret}
Proveedor de autenticación personalizado
Los usuarios que requieran un proveedor de autenticación personalizado pueden implementar la interfaz:
export interface AuthProvider {
getAccessToken: (authConfig: AuthConfiguration, scope: string) => Promise<string>
}
Como ejemplo, implemente el AuthProvider usando @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
}
Para crear instancias el CloudAdapter utilizando el DevTokenProvider
const adapter = new CloudAdapter(authConfig, new DevTokenProvider())
amework.com/.default") devuelve tokenResponse.token }
To instantiate the `CloudAdapter` by using the `DevTokenProvider`
```ts
const adapter = new CloudAdapter(authConfig, new DevTokenProvider())
El paquete de la Biblioteca de autenticación de Microsoft (MSAL) de agentes de Python le proporciona herramientas que le ayuda a crear tokens de acceso para clientes de agente y servicios externos desde un agente autohospedado del SDK de Microsoft 365 Agents.
El paquete microsoft-agents-authentication-msal proporciona la clase MsalAuth, que es el proveedor de autenticación principal. Puede configurarlo para los siguientes tipos de credenciales:
- Secreto del cliente
- Certificado de cliente
- Identidad administrada asignada a usuario
- Identidad administrada asignada por el sistema
Instalar el paquete de autenticación
Instale el paquete de autenticación MSAL desde PyPI:
pip install microsoft-agents-authentication-msal
Inquilino único frente a multiempresa
La autenticación mediante secreto de cliente y certificado de cliente admite configuraciones de inquilino único y multiempresa.
Identidad administrada asignada por el usuario e Identidad administrada asignada por el sistema solo admiten configuraciones de inquilino único.
Nota
Para multiempresa, debe configurar la instancia de Azure Bot como multiempresa y el registro de la aplicación Microsoft Entra ID como Cuentas en cualquier directorio organizativo (Cualquier inquilino de Microsoft Entra ID: multiempresa). Para obtener más información, consulte Aplicaciones de un solo inquilino y multiempresa.
Configurar una conexión de
La biblioteca de autenticación MSAL permite crear y usar varios clientes distintos con el motor de hospedaje de Agents Framework. Cada configuración de conexión crea un cliente de autenticación con nombre para facilitar las comunicaciones con servicios externos u otros agentes.
Proporcione la configuración mediante variables de entorno que utilicen la convención de nombres de doble guion bajo (__) para ajustes anidados. La clase MsalConnectionManager lee estas variables para construir instancias de AgentAuthConfiguration para cada conexión nombrada.
Importante
El administrador de conexiones requiere, como mínimo, una conexión llamada SERVICE_CONNECTION.
Variables de entorno para cada tipo de autenticación
El agente obtiene la configuración de MSAL en tiempo de ejecución a partir de variables de entorno utilizando la función auxiliar load_configuration_from_env().
Las siguientes secciones describen los ajustes de configuración requeridos para cada uno de los tipos de autenticación admitidos, junto con fragmentos de variables de entorno de ejemplo para cada tipo.
Inquilino único con secreto de cliente
Utilice estos parámetros para establecer una conexión de inquilino único que se autentique con un secreto de cliente.
| Nombre de la configuración | Tipo | Valor predeterminado | Description |
|---|---|---|---|
| CLIENTID | Cadena | Nada | El id. de cliente (id. de aplicación) del registro de aplicaciones. |
| CLIENTSECRET | Cadena | Nada | El secreto asociado al registro de la aplicación. Use solo con fines de prueba y desarrollo. |
| TENANTID | Cadena | Nada | El id. de inquilino de Microsoft Entra ID para el registro de la aplicación. |
| AUTHTYPE | Cadena | ClientSecret | El tipo de autenticación. Cámbielo a ClientSecret. |
| SCOPES | Lista de cadenas | Nada | Lista predeterminada de ámbitos para los que solicitar tokens. Solo se usa cuando no se pasan ámbitos desde la solicitud de conexión del agente. |
| AUTHORITY | Cadena | Nada | Cuando está presente, se usa como autoridad para solicitar un token. Si no se establece, el valor predeterminado es 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 configuración recomendada para el desarrollo local es un único inquilino con secreto del cliente.
Multiempresa con secreto de cliente
Para escenarios multiempresas que usan un secreto de cliente, establezca el punto de conexión de la autoridad en el inquilino botframework.com:
| Nombre de la configuración | Tipo | Valor predeterminado | Description |
|---|---|---|---|
| CLIENTID | Cadena | Nada | El id. de cliente (id. de aplicación) del registro de aplicaciones. |
| CLIENTSECRET | Cadena | Nada | El secreto asociado al registro de la aplicación. Use solo con fines de prueba y desarrollo. |
| AUTHTYPE | Cadena | ClientSecret | El tipo de autenticación. Cámbielo a ClientSecret. |
| AUTHORITY | Cadena | Nada | Establézcalo en https://login.microsoftonline.com/botframework.com para multiempresa. |
| SCOPES | Lista de cadenas | Nada | Lista predeterminada de ámbitos para los que solicitar 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
Identidad administrada asignada a usuario
Utilice estos parámetros para configurar la adquisición de tokens con una identidad administrada asignada por el usuario.
| Nombre de la configuración | Tipo | Valor predeterminado | Description |
|---|---|---|---|
| CLIENTID | Cadena | Nada | El Id. de cliente de identidad administrada que se usará al crear el token de acceso. |
| AUTHTYPE | Cadena | ClientSecret | El tipo de autenticación. Cámbielo a UserManagedIdentity. |
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={managed-identity-client-id}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=UserManagedIdentity
Identidad administrada es la configuración recomendada para escenarios de producción. Para más información, consulte Identidades administradas para recursos de Azure.
Nota
Si usa tipos de identidad administrada, el host o el cliente deben ejecutarse en un servicio de Azure configurado con una identidad administrada asignada por el sistema o asignada por el usuario. Para ver qué servicios de Azure admiten identidades administradas, consulte Identidades administradas para recursos de Azure.
Identidad administrada asignada por el sistema
Si usa el tipo de autenticación SystemManagedIdentity, se omite el id. de cliente y se usa la identidad administrada del sistema para el servicio.
| Nombre de la configuración | Tipo | Valor predeterminado | Description |
|---|---|---|---|
| AUTHTYPE | Cadena | ClientSecret | El tipo de autenticación. Cámbielo a SystemManagedIdentity. |
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=SystemManagedIdentity
Nota
Si usa tipos de identidad administrada, el host o el cliente deben ejecutarse en un servicio de Azure configurado con una identidad administrada asignada por el sistema o asignada por el usuario. Para ver qué servicios de Azure admiten identidades administradas, consulte Identidades administradas para recursos de Azure.
Inquilino único con certificado de cliente
Utilice estos parámetros para establecer una conexión de inquilino único que se autentique con un certificado de cliente.
| Nombre de la configuración | Tipo | Valor predeterminado | Description |
|---|---|---|---|
| CLIENTID | Cadena | Nada | El id. de cliente (id. de aplicación) del registro de aplicaciones. |
| TENANTID | Cadena | Nada | El id. de inquilino de Microsoft Entra ID para el registro de la aplicación. |
| AUTHTYPE | Cadena | ClientSecret | El tipo de autenticación. Cámbielo a certificate. |
| CERTPEMFILE | Cadena | Nada | Ruta al archivo de certificado PEM (Privacy-Enhanced Mail). |
| CERTKEYFILE | Cadena | Nada | Ruta de acceso al archivo de clave privada del certificado. |
| SCOPES | Lista de cadenas | Nada | Lista predeterminada de ámbitos para los que solicitar tokens. |
| AUTHORITY | Cadena | Nada | Cuando está presente, se usa como autoridad para solicitar un token. |
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}
Nota
El SDK de Python lee directamente los archivos de certificado PEM y clave privada desde el disco y calcula automáticamente la huella del certificado. El archivo de clave no debe usar contraseña.
Multiempresa con certificado de cliente
Para escenarios multiempresas que usan un certificado de cliente, establezca el punto de conexión de la autoridad en el inquilino 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
Configurar el administrador de conexiones
La clase MsalConnectionManager puede administrar varias conexiones de autenticación para su agente. Lee las configuraciones de conexión y crea instancias de MsalAuth para cada conexión identificada por nombre.
A continuación se muestra un ejemplo de cómo configurar el administrador de conexiones e iniciar su agente:
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()
)
Consulte la muestra de inicio rápido de Python para obtener un ejemplo completo de cómo usar el MsalConnectionManager en un agente de Python.
Proveedor de autenticación personalizado
Los usuarios que necesitan un proveedor de autenticación personalizado pueden implementar la clase 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
Compatibilidad con el registro para la autenticación
El sistema de autenticación MSAL utiliza el módulo estándar de Python logging bajo el nombre de registro microsoft_agents.authentication.msal. Para habilitar el registro detallado de los flujos de autenticación para solucionar problemas en la adquisición de tokens, configure el registrador en su aplicación:
import logging
logging.basicConfig(level=logging.WARNING)
logging.getLogger("microsoft_agents.authentication.msal").setLevel(logging.DEBUG)
Prácticas recomendadas de seguridad
- Almacene los secretos en Azure Key Vault o en variables de entorno; nunca los incluya en el código fuente.
- Utilice identidades administradas siempre que sea posible, ya que eliminan la necesidad de administrar secretos.
- Rota regularmente los secretos de cliente y los certificados.
- Utilice el principio de privilegio mínimo para los ámbitos y permisos.