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.
Con los recursos de Azure Bot Service aprovisionados, puede configurar el agente para autenticarse con Azure Bot Service. El SDK de agentes de Microsoft 365 proporciona 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 los requisitos de seguridad de la aplicación.
El paquete Biblioteca de autenticación de Microsoft del SDK de .NET Agents (MSAL) proporciona herramientas que le ayudan a crear tokens de acceso para clientes de agentes y servicios externos desde un agente autohospedado SDK de agentes de Microsoft 365.
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 que utiliza el nombre del sujeto (incluido SN+I)
- Identidad Administrada Asignada por el Usuario
- Identidad administrada asignada por el sistema
- Credenciales federadas
- Identidad de la carga de trabajo
Instalación del paquete de autenticación
Instale el paquete de autenticación de MSAL desde NuGet:
dotnet add package Microsoft.Agents.Authentication.Msal
Inquilino único frente a multiinquilino
La autenticación de secretos de cliente admite configuraciones de inquilino único y multiinquilino.
Nota:
Para una configuración multiinquilino, debe configurar la instancia de Azure Bot como multiinquilino y el registro de aplicaciones de Microsoft Entra ID como Cuentas en cualquier directorio organizativo (cualquier inquilino de Microsoft Entra ID: multiinquilino). Para más información, consulte Aplicaciones de un solo inquilino y de varios inquilinos.
Configuración de una conexión
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, puede proporcionar varias configuraciones de conexión en el archivo de configuración de la aplicación. Cada configuración de conexión se puede usar para crear un cliente de autenticación con nombre para admitir 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 de las variables de entorno.
En las secciones siguientes se describen las opciones de configuración necesarias y opcionales para cada uno de los tipos de autenticación admitidos para la autenticación MSAL, junto con fragmentos de código de configuración de ejemplo para cada tipo.
Inquilino único con secreto de cliente
Use estas opciones para configurar una conexión de inquilino único que se autentique con un secreto de cliente.
| Nombre de configuración | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| ClientId | String | Null | ClientId (AppId) que se usará al crear el token de acceso. |
| ClientSecret | string | Null | Cuando AuthType es ClientSecret, Is Secret asociado al cliente, solo se debe usar con fines de prueba y desarrollo. |
| AuthorityEndpoint | String | Null | Cuando está presente, se usa como autoridad para solicitar un token. |
| TenantId | String | Null | Cuando present y AuthorityEndpoint son NULL, se usa para crear una entidad para solicitar un token |
| Ámbitos | Lista de cadenas | Null | 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 un solo 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"
],
}
}
}
Multiinquilino con secreto de cliente
Use estas opciones para configurar una conexión multiinquilino que se autentique con un secreto de cliente.
| Nombre de configuración | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| ClientId | String | Null | ClientId (AppId) que se usará al crear el token de acceso. |
| ClientSecret | string | Null | Cuando AuthType es ClientSecret, Is Secret asociado al cliente, solo se debe usar con fines de prueba y desarrollo. |
| AuthorityEndpoint | String | Null | Cuando está presente, se usa como autoridad para solicitar un token. |
| TenantId | String | Null | Cuando present y AuthorityEndpoint son NULL, se usa para crear una entidad para solicitar un token |
| Ámbitos | Lista de cadenas | Null | 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í tienes un ejemplo de appsettings para un entorno multiinquilino 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 por el Usuario
Use estas opciones para configurar la adquisición de tokens con una identidad administrada asignada por el usuario.
| Nombre de configuración | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| ClientId | String | Null | Managed Identity ClientId que se usará al crear el token de acceso. |
Nota:
Cuando quiera usar los tipos de identidades administradas en su agente, debe ejecutar su host o cliente en un servicio de Azure y configurar 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 una 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 se usa SystemManagedIdentity, el agente omite cualquier identificador de cliente proporcionado y usa la identidad administrada por el sistema.
Nota:
Si quiere usar los tipos de identidad administrada en el agente, debe ejecutar el host o el cliente en un servicio de Azure y configurar 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
Use estas opciones para configurar una conexión que intercambia credenciales federadas para tokens de acceso.
| Nombre de configuración | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| ClientId | String | Null | ClientId (AppId) que se usará al crear el token de acceso. |
| AuthorityEndpoint | String | Null | Cuando está presente, se usa como autoridad para solicitar un token. |
| TenantId | String | Null | Cuando present y AuthorityEndpoint son NULL, se usa para crear una entidad para solicitar un token |
| Ámbitos | Lista de cadenas | Null | 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 | String | Null | 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 la carga de trabajo
Use estas opciones para configurar la autenticación de identidad de carga de trabajo mediante un archivo de token federado.
| Nombre de configuración | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| ClientId | String | Null | ClientId (AppId) que se usará al crear el token de acceso. |
| AuthorityEndpoint | String | Null | Cuando está presente, se usa como autoridad para solicitar un token. |
| TenantId | String | Null | Cuando present y AuthorityEndpoint son NULL, se usa para crear una entidad para solicitar un token |
| Ámbitos | Lista de cadenas | Null | 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 | String | Null | El archivo de token (igual que AKS AZURE_FEDERATED_TOKEN_FILE env var) |
Aquí tienes un ejemplo de appsettings para un ú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"
]
}
}
}
Credenciales federadas opcionales u opciones de declaración del cliente para la identidad de la carga de trabajo
Use esta configuración opcional para personalizar el contenido de aserción de cliente para las credenciales federadas o los flujos de identidad de carga de trabajo.
| Nombre de configuración | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| ClientId | String | Null | Identificador de cliente para el que se solicita una aserción firmada |
| TokenEndpoint | String | Null | Punto de conexión del token previsto |
| Reclamaciones | String | Null | Notificaciones que se incluirán en la aserción de cliente |
| ClientCapabilities | Cadena[] | Null | Funcionalidades que declara la aplicación 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,
}
}
}
}
Certificado que utiliza el nombre del sujeto (incluidos SN+I)
Use estas opciones para configurar la autenticación basada en certificados por nombre del firmante del certificado, incluidos los escenarios de SN+I.
| TipoDeAutenticación | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| AuthorityEndpoint | String | Null | Cuando está presente, se usa como autoridad para solicitar un token. |
| TenantId | String | Null | Cuando present y AuthorityEndpoint son NULL, se usa para crear una entidad para solicitar un token |
| Ámbitos | Lista de cadenas | Null | 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 | String | Null | ClientId (AppId) que se usará al crear el token de acceso. |
| CertSubjectName | String | Null | Cuando AuthType es CertificateSubjectName, este es el nombre del firmante que se busca |
| CertStoreName | String | "Mi" | Cuando AuthType es CertificateSubjectName o Certificate, indica en qué almacén de certificados se va a buscar |
| ValidCertificateOnly | bool | Cierto | 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 Subject Name and Issuer (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í tienes 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
Use estas opciones para configurar la autenticación basada en certificados mediante la huella digital del certificado.
| TipoDeAutenticación | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| AuthorityEndpoint | String | Null | Cuando está presente, se usa como autoridad para solicitar un token. |
| TenantId | String | Null | Cuando present y AuthorityEndpoint son NULL, se usa para crear una entidad para solicitar un token |
| Ámbitos | Lista de cadenas | Null | 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 | String | Null | ClientId (AppId) que se usará al crear el token de acceso. |
| CertThumbprint | String | Null | Huella digital del certificado que se va a cargar, solo válida cuando AuthType se establece como certificado |
| CertStoreName | String | "Mi" | Cuando AuthType es CertificateSubjectName o Certificate, indica en qué almacén de certificados se va a buscar |
| ValidCertificateOnly | bool | Cierto | 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 mediante 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.
Aquí tiene un ejemplo del proveedor predeterminado de configuración de MSAL para un host de ASP.NET Core en una clase Program.cs.
Esto se administra mediante la instancia registrada IConnections. La IConnections instancia se agrega de forma predeterminada cuando se usa AddAgent.
// Register your AgentApplication
builder.AddAgent<MyAgent>();
Sin embargo, si no usa AddAgent, debe registrar explícitamente la IConnections instancia.
// 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:
Use la siguiente configuración compartida para controlar el tiempo de espera de la solicitud MSAL, el comportamiento de reintento y los detalles de registro.
| Nombre de configuración | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| 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 el número de reintentos que realiza el proveedor para una solicitud individual de un token. |
| MSALEnabledLogPII | Bool | Falso | Esta configuración controla si MSAL proporciona el registrador adjunto con datos personales. |
Esta configuración se comparte con todos los clientes que crean mediante el proveedor de autenticación msal.
Esta configuración está pensada para leerse mediante un lector IConfiguration, desde una sección de configuración denominada "MSALConfiguration".
Nota:
MSALConfiguration es una configuración opcional. Si no establece esta configuración, se usan las configuraciones predeterminadas para estos valores.
Este es un ejemplo de la entrada en un appsettings.json archivo:
{
"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 de 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 el IConfiguration objeto 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>();
Soporte de registro para 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, añada una entrada para Microsoft.Agents.Authentication.Msal a la configuración de la aplicación para configurar un ILogger que informe sobre las operaciones con tokens de sus conexiones. Si agrega la MSALEnabledLogPII opción , esto también incluye datos personales para la 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 authenticationProvider para obtener tokens web JSON (JWT) para enviar actividades al canal de destino. 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 Biblioteca de autenticación de Microsoft (MSAL). Puede configurarlo para los siguientes tipos de autenticación:
- Inquilino único con secreto de cliente
- Multiinquilino con secreto de cliente
- Identidad administrada por el usuario
- identidad administrada por el sistema
- Credenciales federadas
- Identidad de la carga de trabajo
- Certificado
Instalación del paquete de autenticación
Instale el paquete de autenticación de MSAL desde npm:
npm install @microsoft/agents-hosting
Inquilino único frente a multiinquilino
El secreto de cliente y la autenticación de certificados de cliente admiten configuraciones de inquilino único y multiinquilino.
La identidad administrada asignada por el usuario, la identidad administrada del sistema, las credenciales federadas y la identidad de carga de trabajo solo admiten configuraciones de inquilino único.
Nota:
Para un entorno multiinquilino, debe configurar la instancia de Azure Bot como multiinquilino y el registro de aplicaciones de Microsoft Entra ID como Cuentas en cualquier directorio organizativo (Cualquier inquilino de Microsoft Entra ID: multiinquilino). Para obtener más información, consulte Aplicaciones de un solo inquilino y de varios inquilinos.
Configuración de una conexión
La biblioteca de autenticación de MSAL permite crear y usar varios clientes distintos con el motor de hospedaje de Agents Framework. Mediante el uso de la biblioteca de autenticación de MSAL, puede proporcionar varias 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 admitir comunicaciones con servicios externos u otros agentes.
En las secciones siguientes se describen las opciones de configuración necesarias y opcionales para cada uno de los tipos de autenticación admitidos para el proveedor de autenticación MSAL. También incluyen fragmentos de código de configuración de ejemplo 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 a partir de variables de entorno mediante la función auxiliar loadAuthConfigFromEnv(): AuthConfiguration.
CloudAdapter se inicializa con AuthConfiguration.
La configuración de conexión usa el formato CONNECTIONS__<CONNECTION_NAME>__SETTINGS__<PROPERTY>.
Cuando AUTHTYPE está presente, el SDK usa ese valor para seleccionar el flujo de adquisición de tokens. Cuando AUTHTYPE se omite, el SDK vuelve al comportamiento heredado e deduce el flujo de autenticación de las propiedades de credenciales configuradas.
Inquilino único con secreto de cliente
Use estas opciones para configurar una conexión de inquilino único que se autentique con un secreto de cliente.
| Nombre de configuración | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| CLIENTID | String | Ninguno | Identificador de cliente (id. de aplicación) del registro de la aplicación. |
| CLIENTSECRET | String | Ninguno | Secreto asociado al registro de la aplicación. Use solo con fines de prueba y desarrollo. |
| TENANTID | String | Ninguno | Identificador de inquilino de Microsoft Entra para el registro de la aplicación. |
| AUTHTYPE | String | Ninguno | Establécelo en ClientSecret. |
| ÁMBITO | String | Ninguno | Ámbito de recurso predeterminado para solicitar tokens cuando el autor de la llamada no proporciona uno. |
| AUTORIDAD | String | Ninguno | Cuando está presente, se usa como la entidad desde la que 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
El inquilino único con secreto de cliente es la configuración recomendada para el desarrollo local.
Multiinquilino con secreto de cliente
Para escenarios de varios inquilinos que usan un secreto de cliente, establezca el punto de conexión de la autoridad en el inquilino botframework.com:
| Nombre de configuración | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| CLIENTID | String | Ninguno | Identificador de cliente (id. de aplicación) del registro de la aplicación. |
| CLIENTSECRET | String | Ninguno | Secreto asociado al registro de la aplicación. Use solo con fines de prueba y desarrollo. |
| AUTHTYPE | String | Ninguno | Establécelo en ClientSecret. |
| AUTORIDAD | String | Ninguno | Establézcalo en https://login.microsoftonline.com/botframework.com para multicliente. |
| ÁMBITO | String | Ninguno | Ámbito de recurso predeterminado para solicitar tokens cuando el autor de la llamada no proporciona uno. |
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
Use estas opciones para configurar la adquisición de tokens con una identidad administrada asignada por el usuario.
| Nombre de configuración | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| CLIENTID | String | Ninguno | El Id. de cliente de identidad administrada que se usará al crear el token de acceso. |
| AUTHTYPE | String | Ninguno | Establécelo en UserManagedIdentity. |
| ÁMBITO | String | Ninguno | Ámbito de recurso predeterminado para solicitar tokens cuando el autor de la llamada no proporciona uno. |
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 dentro de 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 SystemManagedIdentityde autenticación , se omite el identificador de cliente y se usa la identidad administrada por el sistema para el servicio.
| Nombre de configuración | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| AUTHTYPE | String | Ninguno | Establécelo en SystemManagedIdentity. |
| ÁMBITO | String | Ninguno | Ámbito de recurso predeterminado para solicitar tokens cuando el autor de la llamada no proporciona uno. |
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 dentro de 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
Use estas opciones para configurar una aplicación de inquilino único que se autentique a través de credenciales federadas.
| Nombre de configuración | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| CLIENTID | String | Ninguno | Identificador de cliente (id. de aplicación) del registro de la aplicación. |
| TENANTID | String | Ninguno | Identificador de inquilino de Microsoft Entra para el registro de la aplicación. |
| AUTHTYPE | String | Ninguno | Establécelo en FederatedCredentials. |
| AUTORIDAD | String | Ninguno | Cuando está presente, se usa como la entidad desde la que solicitar un token. Si no se establece, el valor predeterminado es https://login.microsoftonline.com/{TENANTID}. |
| ÁMBITO | String | Ninguno | Ámbito de recurso predeterminado para solicitar tokens cuando el autor de la llamada no proporciona uno. |
| FICCLIENTID | String | Ninguno | 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 obtener más información, consulte Autenticación mediante credenciales de identidad federada.
WorkloadIdentity
Use esta configuración para configurar la adquisición de tokens mediante Microsoft Entra Workload Identity.
| Nombre de configuración | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| AUTHTYPE | String | Ninguno | Establécelo en WorkloadIdentity. |
| CLIENTID | String | Ninguno | Identificador de cliente (id. de aplicación) del registro de la aplicación. |
| TENANTID | String | Ninguno | Identificador de inquilino de Microsoft Entra para el registro de la aplicación. |
| AUTORIDAD | String | Ninguno | Cuando está presente, se usa como la entidad desde la que solicitar un token. Si no se establece, el valor predeterminado es https://login.microsoftonline.com/{TENANTID}. |
| ÁMBITO | String | Ninguno | Ámbito de recurso predeterminado para solicitar tokens cuando el autor de la llamada no proporciona uno. |
| FEDERATEDTOKENFILE | String | Ninguno | 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
Use estas opciones para configurar una conexión de inquilino único que se autentique con un certificado de cliente.
| Nombre de configuración | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| CLIENTID | String | Ninguno | Identificador de cliente (id. de aplicación) del registro de la aplicación. |
| TENANTID | String | Ninguno | Identificador de inquilino de Microsoft Entra para el registro de la aplicación. |
| AUTHTYPE | String | Ninguno | Establécelo en Certificate. |
| CERTPEMFILE | String | Ninguno | Ruta de acceso al archivo de certificado Privacy-Enhanced Mail (PEM). |
| CERTKEYFILE | String | Ninguno | Ruta de acceso al archivo de clave privada del certificado. |
| ÁMBITO | String | Ninguno | Ámbito de recurso predeterminado para solicitar tokens cuando el autor de la llamada no proporciona uno. |
| AUTORIDAD | String | Ninguno | Cuando está presente, se usa como la entidad desde la que solicitar un token. |
| SENDX5C | Booleano | 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 JS lee el certificado PEM y los archivos de clave privada directamente desde el disco y calcula automáticamente la huella digital del certificado. El archivo de clave no debe usar una contraseña.
Multiinquilino con certificado de cliente
Para escenarios de varios inquilinos 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 el SDK de Azure Bot Framework
Para cargar la configuración con el mismo formato que el SDK de Bot Framework de Azure, use loadPrevAuthConfigFromEnv(): AuthConfiguration.
Use estos nombres de configuración heredados al migrar las configuraciones existentes de Bot Framework SDK.
| Nombre de configuración | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| MicrosoftAppTenantId | String | Null | Identificador de ID de tenant de Microsoft Entra (formato heredado del SDK de Bot Framework). |
| MicrosoftAppId | String | Null | El identificador de cliente (id. de aplicación) del registro de la aplicación (formato heredado del SDK de Bot Framework). |
| MicrosoftAppPassword | String | Null | Secreto de la aplicación (formato heredado del SDK de Bot Framework). |
MicrosoftAppTenantId={tenant-id-guid}
MicrosoftAppId={app-id-guid}
MicrosoftAppPassword={app-registration-secret}
Proveedor de autenticación personalizado
Los usuarios que requieren un proveedor de autenticación personalizado pueden implementar la interfaz:
export interface AuthProvider {
getAccessToken: (authConfig: AuthConfiguration, scope: string) => Promise<string>
}
Por ejemplo, implemente AuthProvider mediante @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 una instancia de CloudAdapter mediante 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 Biblioteca de autenticación de Microsoft del SDK de agentes de Python (MSAL) proporciona herramientas que le ayudan a crear tokens de acceso para clientes de agentes y servicios externos desde un agente autohospedado SDK de agentes de Microsoft 365.
El microsoft-agents-authentication-msal paquete proporciona la MsalAuth clase , que es el proveedor de autenticación principal. Puede configurarlo para los siguientes tipos de credenciales:
- Secreto de cliente
- Certificado de cliente
- Identidad Administrada Asignada por el Usuario
- Identidad administrada asignada por el sistema
Instalación del paquete de autenticación
Instale el paquete de autenticación de MSAL desde PyPI:
pip install microsoft-agents-authentication-msal
Inquilino único frente a multiinquilino
El secreto de cliente y la autenticación de certificados de cliente admiten configuraciones de inquilino único y multiinquilino.
La identidad administrada asignada por el usuario y la identidad administrada asignada por el sistema solo admiten configuraciones de un solo inquilino.
Nota:
Para varios inquilinos, debe configurar la instancia de Bot de Azure como multiinquilino y el registro de aplicaciones Microsoft Entra ID como Accounts en cualquier directorio organizativo (cualquier inquilino de Microsoft Entra ID: multiinquilino). Para obtener más información, consulte Aplicaciones de uno o varios inquilinos.
Configuración de una conexión
La biblioteca de autenticación de 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 admitir comunicaciones con servicios externos u otros agentes.
Proporcionar la configuración mediante variables de entorno que utilicen la convención de nombres con doble subrayado (__) para opciones de configuración anidadas. La MsalConnectionManager clase lee estas variables para construir AgentAuthConfiguration instancias para cada conexión con nombre.
Importante
El administrador de conexiones requiere como mínimo una conexión denominada 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 mediante la función auxiliar load_configuration_from_env().
En las secciones siguientes se describen las opciones de configuración necesarias para cada uno de los tipos de autenticación admitidos, junto con fragmentos de código de variables de entorno de ejemplo para cada tipo.
Inquilino único con secreto de cliente
Use estas opciones para configurar una conexión de inquilino único que se autentique con un secreto de cliente.
| Nombre de configuración | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| CLIENTID | String | Ninguno | Identificador de cliente (id. de aplicación) del registro de la aplicación. |
| CLIENTSECRET | String | Ninguno | Secreto asociado al registro de la aplicación. Use solo con fines de prueba y desarrollo. |
| TENANTID | String | Ninguno | Identificador de inquilino de Microsoft Entra para el registro de la aplicación. |
| AUTHTYPE | String | ClientSecret | El tipo de autenticación. Establécelo en ClientSecret. |
| ÁMBITOS | Lista de cadenas | Ninguno | Lista predeterminada de ámbitos para los que solicitar tokens. Solo se utiliza cuando no se pasan ámbitos desde la solicitud de conexión del agente. |
| AUTORIDAD | String | Ninguno | Cuando está presente, se usa como la entidad desde la que 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}
El inquilino único con secreto de cliente es la configuración recomendada para el desarrollo local.
Multiinquilino con secreto de cliente
Para escenarios de varios inquilinos que usan un secreto de cliente, establezca el punto de conexión de la autoridad en el inquilino botframework.com:
| Nombre de configuración | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| CLIENTID | String | Ninguno | Identificador de cliente (id. de aplicación) del registro de la aplicación. |
| CLIENTSECRET | String | Ninguno | Secreto asociado al registro de la aplicación. Use solo con fines de prueba y desarrollo. |
| AUTHTYPE | String | ClientSecret | El tipo de autenticación. Establécelo en ClientSecret. |
| AUTORIDAD | String | Ninguno | Establézcalo en https://login.microsoftonline.com/botframework.com para multicliente. |
| ÁMBITOS | Lista de cadenas | Ninguno | 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 por el Usuario
Use estas opciones para configurar la adquisición de tokens con una identidad administrada asignada por el usuario.
| Nombre de configuración | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| CLIENTID | String | Ninguno | El Id. de cliente de identidad administrada que se usará al crear el token de acceso. |
| AUTHTYPE | String | ClientSecret | El tipo de autenticación. Establécelo en 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 dentro de 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 SystemManagedIdentityde autenticación , se omite el identificador de cliente y se usa la identidad administrada por el sistema para el servicio.
| Nombre de configuración | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| AUTHTYPE | String | ClientSecret | El tipo de autenticación. Establécelo en SystemManagedIdentity. |
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=SystemManagedIdentity
Nota:
Si usa tipos de identidad administrada, el host o el cliente deben ejecutarse dentro de 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
Use estas opciones para configurar una conexión de inquilino único que se autentique con un certificado de cliente.
| Nombre de configuración | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| CLIENTID | String | Ninguno | Identificador de cliente (id. de aplicación) del registro de la aplicación. |
| TENANTID | String | Ninguno | Identificador de inquilino de Microsoft Entra para el registro de la aplicación. |
| AUTHTYPE | String | ClientSecret | El tipo de autenticación. Establécelo en certificate. |
| CERTPEMFILE | String | Ninguno | Ruta de acceso al archivo de certificado Privacy-Enhanced Mail (PEM). |
| CERTKEYFILE | String | Ninguno | Ruta de acceso al archivo de clave privada del certificado. |
| ÁMBITOS | Lista de cadenas | Ninguno | Lista predeterminada de ámbitos para los que solicitar tokens. |
| AUTORIDAD | String | Ninguno | Cuando está presente, se usa como la entidad desde la que 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 el certificado PEM y los archivos de clave privada directamente desde el disco y calcula automáticamente la huella digital del certificado. El archivo de clave no debe usar una contraseña.
Multiinquilino con certificado de cliente
Para escenarios de varios inquilinos 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
Configuración del administrador de conexiones
La MsalConnectionManager clase puede administrar varias conexiones de autenticación para el agente. Lee las configuraciones de conexión y crea MsalAuth instancias para cada conexión con nombre.
Este es un ejemplo de cómo configurar el administrador de conexiones e iniciar el 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 el ejemplo de inicio rápido Python para obtener un ejemplo completo del uso de MsalConnectionManager en un agente de Python.
Proveedor de autenticación personalizado
Los usuarios que requieren un proveedor de autenticación personalizado pueden implementar la AccessTokenProviderBase clase base:
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
Soporte de registro para autenticación
El sistema de autenticación MSAL usa el módulo estándar Python logging bajo el nombre del registrador microsoft_agents.authentication.msal. Para habilitar el registro detallado de flujos de autenticación para solucionar problemas de adquisición de tokens, configure el registrador en la aplicación:
import logging
logging.basicConfig(level=logging.WARNING)
logging.getLogger("microsoft_agents.authentication.msal").setLevel(logging.DEBUG)
Prácticas recomendadas de seguridad
- Almacene secretos en Azure Key Vault o variables de entorno; nunca los confirme en el código fuente.
- Use identidades administradas siempre que sea posible, ya que eliminan la necesidad de administrar secretos.
- Cambiar periódicamente los secretos del cliente y los certificados.
- Use el principio de privilegios mínimos para ámbitos y permisos.