Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Com seus recursos de Azure Serviço de Bot provisionados, você pode configurar seu agente para autenticar com Azure Serviço de Bot. O SDK de Agentes do Microsoft 365 fornece opções flexíveis para a configuração de autenticação, permitindo que você escolha o método que melhor atende às necessidades e aos requisitos de segurança do aplicativo.
O pacote .NET Agents SDK Biblioteca do Microsoft Authenticator (MSAL) fornece ferramentas que ajudam você a criar tokens de acesso para clientes de agente e serviços externos de um agente auto-hospedado SDK de Agentes do Microsoft 365.
O pacote Microsoft.Agents.Athentication.Msal fornece a classe MsalAuth, que é o provedor de autenticação principal. Você pode configurá-lo para os seguintes tipos de credenciais:
- Locatário único com segredo do cliente e Multilocatário com segredo do cliente
- Certificado de cliente usando a impressão digital
- Certificado de cliente usando o nome do titular (incluindo SN+I)
- Identidade gerenciada atribuída pelo usuário
- Identidade gerenciada atribuída pelo sistema
- Credenciais federadas
- Identidade da carga de trabalho
Instalar o pacote de autenticação
Instale o pacote de autenticação MSAL do NuGet:
dotnet add package Microsoft.Agents.Authentication.Msal
Locatário único versus multilocatário
A autenticação por segredo do cliente oferece suporte a configurações de locatário único e de vários locatários.
Note
Para um ambiente multilocatário, você precisa configurar a instância do bot do Azure como multilocatária e o registro do aplicativo no Microsoft Entra ID como Contas em qualquer diretório organizacional (qualquer locatário do Microsoft Entra ID - Multilocatário). Para saber mais, consulte aplicativos únicos e multilocatários.
Configurar uma conexão
O pacote de autenticação MSAL permite que você crie e use vários clientes distintos com o mecanismo de hospedagem do Agents Framework. Com o pacote de autenticação MSAL, você pode fornecer várias configurações de conexão no arquivo de configuração do aplicativo. Cada configuração de conexão pode ser usada para criar um cliente de autenticação nomeado para dar suporte a comunicações com serviços externos ou outros agentes.
Variáveis de ambiente para cada tipo de autenticação
O agente obtém a configuração do MSAL em tempo de execução a partir de variáveis de ambiente.
As seções a seguir descrevem as configurações necessárias e opcionais para cada um dos tipos de autenticação de MSAL com suporte, juntamente com snippets de configuração de exemplo para cada tipo.
Locatário único com segredo do cliente
Use essas configurações para configurar uma conexão de locatário único que se autentica com um segredo do cliente.
| Nome da Configuração | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
| ClientId | String | Nulo | ClientId (AppId) a ser usado ao criar o Token de acesso. |
| ClientSecret | cadeia | Nulo | Quando AuthType é ClientSecret, é segredo associado ao cliente, isso só deve ser usado para fins de teste e desenvolvimento. |
| AuthorityEndpoint | String | Nulo | Quando presente, usado como Autoridade para solicitar um token. |
| TenantId | String | Nulo | Quando presente e AuthorityEndpoint for nulo, usado para criar uma Autoridade para solicitar um token |
| Escopos | Lista da cadeia de caracteres | Nulo | Listas Padrão de escopos para os quais solicitar tokens. É usado somente quando nenhum escopo é passado da solicitação de conexão do agente |
Aqui está um exemplo de appsettings para locatário ClientSecretúnico:
"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"
],
}
}
}
Multilocatário com segredo do cliente
Use essas configurações para configurar uma conexão multilocatário que se autentica com um segredo do cliente.
| Nome da Configuração | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
| ClientId | String | Nulo | ClientId (AppId) a ser usado ao criar o Token de acesso. |
| ClientSecret | cadeia | Nulo | Quando AuthType é ClientSecret, é segredo associado ao cliente, isso só deve ser usado para fins de teste e desenvolvimento. |
| AuthorityEndpoint | String | Nulo | Quando presente, usado como Autoridade para solicitar um token. |
| TenantId | String | Nulo | Quando presente e AuthorityEndpoint for nulo, usado para criar uma Autoridade para solicitar um token |
| Escopos | Lista da cadeia de caracteres | Nulo | Listas Padrão de escopos para os quais solicitar tokens. É usado somente quando nenhum escopo é passado da solicitação de conexão do agente |
Aqui está um exemplo de appsettings para multilocatário com segredo do 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"
],
}
}
}
Identidade gerenciada atribuída pelo usuário
Use essas configurações para configurar a aquisição de token com uma identidade gerenciada atribuída pelo usuário.
| Nome da Configuração | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
| ClientId | String | Nulo | ClientId da Identidade Gerenciada a ser usado ao criar o Token de acesso. |
Note
Quando você quiser usar os tipos de identidade gerenciada no seu agente, precisará executar o host ou cliente em um serviço do Azure e configurar esse serviço com uma identidade gerenciada atribuída pelo sistema ou uma identidade gerenciada atribuída pelo usuário.
Aqui está um exemplo de appsettings para Identidade Gerenciada Atribuída pelo Usuário:
"Connections": {
"ServiceConnection": {
"Settings": {
"AuthType": "UserManagedIdentity",
"ClientId": "{{BOT_ID}}",
"Scopes": [
"https://api.botframework.com/.default"
]
}
}
}
Identidade gerenciada atribuída pelo sistema
Quando você usa SystemManagedIdentity, o agente ignora qualquer ID de cliente fornecida e usa a identidade gerenciada pelo sistema.
Note
Quando você quiser usar os tipos de identidade gerenciada no seu agente, precisará executar o host ou cliente em um serviço do Azure e configurar esse serviço para usar uma identidade gerenciada atribuída pelo sistema ou uma identidade gerenciada atribuída pelo usuário.
Aqui está um exemplo de appsettings do tipo de autenticação de Identidade Gerenciada atribuída pelo sistema:
"Connections": {
"ServiceConnection": {
"Settings": {
"AuthType": "SystemManagedIdentity",
"Scopes": [
"https://api.botframework.com/.default"
]
}
}
}
Credenciais federadas
Use essas configurações para configurar uma conexão que troca credenciais federadas por tokens de acesso.
| Nome da Configuração | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
| ClientId | String | Nulo | ClientId (AppId) a ser usado ao criar o Token de acesso. |
| AuthorityEndpoint | String | Nulo | Quando presente, usado como Autoridade para solicitar um token. |
| TenantId | String | Nulo | Quando presente e AuthorityEndpoint for nulo, usado para criar uma Autoridade para solicitar um token |
| Escopos | Lista da cadeia de caracteres | Nulo | Listas Padrão de escopos para os quais solicitar tokens. É usado somente quando nenhum escopo é passado da solicitação de conexão do agente |
| FederatedClientId | String | Nulo | ClientId da Identidade Gerenciada a ser usado ao criar o Token de acesso. |
Aqui está um exemplo 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"
]
}
}
}
Identidade da carga de trabalho
Use essas configurações para configurar a autenticação de identidade de carga de trabalho usando um arquivo de token federado.
| Nome da Configuração | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
| ClientId | String | Nulo | ClientId (AppId) a ser usado ao criar o Token de acesso. |
| AuthorityEndpoint | String | Nulo | Quando presente, usado como Autoridade para solicitar um token. |
| TenantId | String | Nulo | Quando presente e AuthorityEndpoint for nulo, usado para criar uma Autoridade para solicitar um token |
| Escopos | Lista da cadeia de caracteres | Nulo | Listas Padrão de escopos para os quais solicitar tokens. É usado somente quando nenhum escopo é passado da solicitação de conexão do agente |
| FederatedTokenFile | String | Nulo | O arquivo de token (o mesmo que AKS AZURE_FEDERATED_TOKEN_FILE env var) |
Aqui está um exemplo de appsettings para locatário WorkloadIdentityúnico:
"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"
]
}
}
}
Opções opcionais de credenciais federadas ou de declaração do cliente para identidade da carga de trabalho
Use essas configurações opcionais para personalizar o conteúdo da declaração do cliente para credenciais federadas ou fluxos de identidade de carga de trabalho.
| Nome da Configuração | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
| ClientId | String | Nulo | ID do Cliente para a qual uma declaração assinada é solicitada |
| TokenEndpoint | String | Nulo | O ponto de extremidade de token pretendido |
| Declarações | String | Nulo | Declarações a serem incluídas na declaração do cliente |
| ClientCapabilities | String[] | Nulo | Recursos que o aplicativo 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 com nome do titular (incluindo SN+I)
Use estas configurações para configurar a autenticação baseada em certificado usando o nome do titular do certificado, incluindo cenários de SN+I.
| TipoDeAutenticação | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
| AuthorityEndpoint | String | Nulo | Quando presente, usado como Autoridade para solicitar um token. |
| TenantId | String | Nulo | Quando presente e AuthorityEndpoint for nulo, usado para criar uma Autoridade para solicitar um token |
| Escopos | Lista da cadeia de caracteres | Nulo | Listas Padrão de escopos para os quais solicitar tokens. É usado somente quando nenhum escopo é passado da solicitação de conexão do agente |
| ClientId | String | Nulo | ClientId (AppId) a ser usado ao criar o Token de acesso. |
| CertSubjectName | String | Nulo | Quando AuthType é CertificateSubjectName, esse é o nome do assunto que é procurado |
| CertStoreName | String | "Meu" | Quando AuthType é CertificateSubjectName ou Certificate, indica em qual repositório de certificados procurar |
| ValidCertificateOnly | bool | Verdade | Requer que o certificado tenha uma cadeia válida. |
| SendX5C | bool | Falso | Habilita a rotação automática de certificado com a configuração apropriada. |
Aqui está um exemplo de appsettings para certificado usando o nome da entidade para Nome da Entidade e Emissor (SNI) e multilocatário:
"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"
]
}
}
},
Aqui está um exemplo de configuração de aplicativo para Nome do Titular do Certificado para SN+I e locatário único:
"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 do cliente usando impressão digital
Use essas configurações para configurar a autenticação baseada em certificado por impressão digital do certificado.
| TipoDeAutenticação | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
| AuthorityEndpoint | String | Nulo | Quando presente, usado como Autoridade para solicitar um token. |
| TenantId | String | Nulo | Quando presente e AuthorityEndpoint for nulo, usado para criar uma Autoridade para solicitar um token |
| Escopos | Lista da cadeia de caracteres | Nulo | Listas Padrão de escopos para os quais solicitar tokens. É usado somente quando nenhum escopo é passado da solicitação de conexão do agente |
| ClientId | String | Nulo | ClientId (AppId) a ser usado ao criar o Token de acesso. |
| CertThumbprint | String | Nulo | Impressão digital do certificado a ser carregado, válida somente quando AuthType é definido como Certificado |
| CertStoreName | String | "Meu" | Quando AuthType é CertificateSubjectName ou Certificate, indica em qual repositório de certificados procurar |
| ValidCertificateOnly | bool | Verdade | Requer que o certificado tenha uma cadeia válida. |
| SendX5C | bool | Falso | Habilita a rotação automática de certificado com a configuração apropriada. |
Aqui está um exemplo de configuração de appsettings para certificado usando a impressão digital do 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"
]
}
}
},
Provedor de configuração padrão para MSAL
Para facilitar a configuração, fornecemos uma extensão do provedor de serviços para adicionar as configurações padrão para MSAL ao Agente.
Aqui está um exemplo do provedor de configuração padrão do MSAL para um host do ASP.NET Core na classe Program.cs.
Isso é gerenciado pela instância IConnections registrada. A IConnections instância é adicionada por padrão quando você usa AddAgent.
// Register your AgentApplication
builder.AddAgent<MyAgent>();
No entanto, se você não estiver usando AddAgent, será necessário registrar explicitamente a IConnections instância.
// Add Connections object to access configured token connections.
builder.Services.AddSingleton<IConnections, ConfigurationConnections>();
Mais opções de configuração da MSAL
Há várias opções de configuração compartilhadas que controlam as definições gerais para a aquisição de tokens do Microsoft Entra Identity.
Essas configurações são:
Use as seguintes configurações compartilhadas para controlar o tempo limite da solicitação MSAL, o comportamento de repetição e os detalhes de log.
| Nome da Configuração | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
| MSALRequestTimeout | TimeSpan | 30segundos | Essa configuração controla por quanto tempo o cliente aguardará uma resposta de Microsoft Entra ID depois de enviar uma solicitação. |
| MSALRetryCount | int | 3 | Essa configuração controla quantas tentativas de repetição o provedor faz para uma solicitação individual de um token. |
| MSALEnabledLogPII | Bool | Falso | Essa configuração controla se a MSAL fornece dados pessoais ao logger anexado. |
Essas configurações são compartilhadas com todos os clientes que criam usando o Provedor de Autenticação MSAL.
Essas configurações destinam-se a ser lidas por um leitor IConfiguration, a partir de uma seção de configuração chamada "MSALConfiguration".
Note
MSALConfiguration é uma configuração opcional. Se você não definir essa configuração, as configurações padrão para esses valores serão usadas.
Aqui está um exemplo da entrada em um appsettings.json arquivo:
{
"MSALConfiguration": {
"MSALEnabledLogPII": "true",
"MSALRequestTimeout": "00:00:40",
"MSALRetryCount": "1"
},
}
Nesse caso, esse bloco de configurações instruiria todos os clientes MSAL criados com o provedor MSAL a habilitar o registro em log de dados pessoais, definiria o tempo limite como 40 segundos e reduziria a contagem de repetições para 1.
Essa extensão procura uma seção de configuração chamada "MSALConfiguration" em seu IConfiguration objeto e cria um objeto de configuração msal a partir dele.
Se a seção MSALConfig não for encontrada, ela criará o Objeto de Configuração MSAL usando valores padrão.
// Add default agent MsalAuth support
builder.Services.AddDefaultMsalAuth(builder.Configuration);
// Register your AgentApplication
builder.AddAgent<MyAgent>();
Suporte ao registro em log para autenticação
O sistema de autenticação MSAL permite o registro em log independente de fluxos de autenticação para integração de telemetria, caso seja necessário solucionar problemas de aquisição de token.
Para habilitar o log, adicione uma entrada para Microsoft.Agents.Authentication.Msal nas configurações do aplicativo para configurar um ILogger para gerar relatórios sobre operações de token das suas conexões. Se você adicionar a opção MSALEnabledLogPII , isso também inclui dados pessoais para sua conexão.
Aqui está um exemplo do bloco de registro nesse caso:
"Logging": {
"LogLevel": {
"Default": "Warning",
"Microsoft.Agents": "Warning",
"Microsoft.Hosting.Lifetime": "Information",
"Microsoft.Agents.Authentication.Msal": "Trace"
}
}
Nesse caso, o registro em log está habilitado para vários módulos, incluindo Microsoft.Agents.Authentication.Msal, em que o nível de rastreamento é "Rastreamento" para MSAL.
O SDK do JavaScript requer um AuthenticationProvider para obter JWT (Tokens Web JSON) para enviar atividades para o canal de destino. Para obter mais informações, consulte tokens do Access na plataforma de identidade da Microsoft.
O pacote @microsoft/agents-hosting fornece um provedor de autenticação padrão com base em MICROSOFT AUTHENTICATION LIBRARY (MSAL). Você pode configurá-lo para os seguintes tipos de autenticação:
- Locatário único com segredo do cliente
- Multilocatário com segredo do cliente
- Identidade gerenciada pelo usuário
- Identidade gerenciada pelo sistema
- Credenciais federadas
- Identidade da carga de trabalho
- Certificado
Instalar o pacote de autenticação
Instale o pacote de autenticação MSAL do npm:
npm install @microsoft/agents-hosting
Locatário único versus multilocatário
A autenticação por segredo do cliente e por certificado do cliente oferece suporte a configurações de locatário único e multilocatário.
Identidade Gerenciada Atribuída pelo Usuário, Identidade Gerenciada do Sistema, Credenciais Federadas e Identidade de Carga de Trabalho oferecem suporte apenas a configurações de locatário único.
Note
Para uma configuração multilocatário, você precisa configurar a instância do bot do Azure como multilocatário e o registro de aplicativo no Microsoft Entra ID como Contas em qualquer diretório organizacional (qualquer locatário do Microsoft Entra ID - Multilocatário). Para saber mais, consulte aplicativos únicos e multilocatários.
Configurar uma conexão
A biblioteca de autenticação MSAL permite que você crie e use vários clientes distintos com o mecanismo de hospedagem do Agents Framework. Usando a biblioteca de autenticação MSAL, você pode fornecer várias configurações de conexão no arquivo de configuração do aplicativo. Cada configuração de conexão pode criar um cliente de autenticação nomeado para dar suporte a comunicações com serviços externos ou outros agentes.
As seções a seguir descrevem as configurações necessárias e opcionais para cada um dos tipos de autenticação com suporte para o provedor de autenticação MSAL. Eles também incluem trechos de exemplos de configuração para cada tipo.
Variáveis de ambiente para cada tipo de autenticação
O agente obtém a configuração do MSAL em tempo de execução a partir de variáveis de ambiente ao usar a função auxiliar loadAuthConfigFromEnv(): AuthConfiguration. Inicializa-se o CloudAdapter com o AuthConfiguration.
As configurações de conexão usam o formato CONNECTIONS__<CONNECTION_NAME>__SETTINGS__<PROPERTY>.
Quando AUTHTYPE estiver presente, o SDK usará esse valor para selecionar o fluxo de aquisição de token. Quando AUTHTYPE é omitido, o SDK volta para o comportamento herdado e infere o fluxo de autenticação das propriedades de credencial configuradas.
Locatário único com segredo do cliente
Use estas configurações para configurar uma conexão de locatário único que usa um segredo do cliente para autenticação.
| Nome da Configuração | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
| CLIENTID | String | Nenhum | O ID do cliente (ID do aplicativo) do registro do aplicativo. |
| CLIENTSECRET | String | Nenhum | O segredo associado ao registro do aplicativo. Use apenas para fins de teste e desenvolvimento. |
| TENANTID | String | Nenhum | O ID do locatário do Microsoft Entra ID para o registro do aplicativo. |
| AUTHTYPE | String | Nenhum | Defina como ClientSecret. |
| SCOPE | String | Nenhum | Escopo de recurso padrão usado para solicitar tokens caso o chamador não forneça um. |
| AUTORIDADE | String | Nenhum | Quando presente, usado como autoridade para solicitar um token. Se não estiver definida, o padrão será 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
Locatário único com segredo do cliente é a configuração recomendada para desenvolvimento local.
Multilocatário com segredo do cliente
Para cenários multilocatário que usam um segredo do cliente, defina o endpoint de autoridade para o locatário botframework.com:
| Nome da Configuração | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
| CLIENTID | String | Nenhum | O ID do cliente (ID do aplicativo) do registro do aplicativo. |
| CLIENTSECRET | String | Nenhum | O segredo associado ao registro do aplicativo. Use apenas para fins de teste e desenvolvimento. |
| AUTHTYPE | String | Nenhum | Defina como ClientSecret. |
| AUTORIDADE | String | Nenhum | Definido como https://login.microsoftonline.com/botframework.com para multitenant. |
| SCOPE | String | Nenhum | Escopo de recurso padrão para solicitar tokens para quando um não for fornecido pelo chamador. |
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 essas configurações para configurar a aquisição de token com uma Identidade Gerenciada Atribuída pelo Usuário.
| Nome da Configuração | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
| CLIENTID | String | Nenhum | A ID do cliente de identidade gerenciada a ser usada ao criar o token de acesso. |
| AUTHTYPE | String | Nenhum | Defina como UserManagedIdentity. |
| SCOPE | String | Nenhum | Escopo de recurso padrão para solicitar tokens para quando um não for fornecido pelo chamador. |
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=UserManagedIdentity
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={managed-identity-client-id}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__SCOPE=https://api.botframework.com
A Identidade Gerenciada é a configuração recomendada para cenários de produção. Para saber mais, confira identidades gerenciadas para recursos do Azure.
Note
Se você usar tipos de identidade gerenciada, seu host ou cliente deverá ser executado em um serviço Azure configurado com uma identidade gerenciada atribuída pelo sistema ou atribuída pelo usuário. Para ver quais serviços do Azure dão suporte a identidades gerenciadas, consulte identidades gerenciadas para recursos do Azure.
SystemManagedIdentity
Se você usar o tipo SystemManagedIdentityde autenticação, a ID do cliente será ignorada e a identidade gerenciada pelo sistema para o serviço será usada.
| Nome da Configuração | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
| AUTHTYPE | String | Nenhum | Defina como SystemManagedIdentity. |
| SCOPE | String | Nenhum | Escopo de recurso padrão para solicitar tokens para quando um não for fornecido pelo chamador. |
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=SystemManagedIdentity
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__SCOPE=https://api.botframework.com
Note
Se você usar tipos de identidade gerenciada, seu host ou cliente deverá ser executado em um serviço Azure configurado com uma identidade gerenciada atribuída pelo sistema ou atribuída pelo usuário. Para ver quais serviços do Azure dão suporte a identidades gerenciadas, consulte identidades gerenciadas para recursos do Azure.
FederatedCredentials
Use essas configurações para configurar um aplicativo de locatário único que se autentica por meio de Credenciais Federadas.
| Nome da Configuração | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
| CLIENTID | String | Nenhum | O ID do cliente (ID do aplicativo) do registro do aplicativo. |
| TENANTID | String | Nenhum | O ID do locatário do Microsoft Entra ID para o registro do aplicativo. |
| AUTHTYPE | String | Nenhum | Defina como FederatedCredentials. |
| AUTORIDADE | String | Nenhum | Quando presente, é usada como autoridade à qual solicitar um token. Se não estiver definida, o padrão será https://login.microsoftonline.com/{TENANTID}. |
| SCOPE | String | Nenhum | Escopo de recurso padrão para solicitar tokens, caso nenhum seja fornecido pelo chamador. |
| FICCLIENTID | String | Nenhum | A ID do cliente de identidade gerenciada usada para obter o token externo para credenciais 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 obter mais informações, consulte Autenticação usando credenciais de identidade federadas.
WorkloadIdentity
Use essas configurações para configurar a obtenção de token por meio da Microsoft Entra Workload Identity.
| Nome da Configuração | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
| AUTHTYPE | String | Nenhum | Defina como WorkloadIdentity. |
| CLIENTID | String | Nenhum | O ID do cliente (ID do aplicativo) do registro do aplicativo. |
| TENANTID | String | Nenhum | O ID do locatário do Microsoft Entra ID para o registro do aplicativo. |
| AUTORIDADE | String | Nenhum | Quando presente, usado como autoridade para solicitar um token. Se não estiver definida, o padrão será https://login.microsoftonline.com/{TENANTID}. |
| SCOPE | String | Nenhum | Escopo de recurso padrão para solicitar tokens para quando um não for fornecido pelo chamador. |
| FEDERATEDTOKENFILE | String | Nenhum | Caminho para o arquivo de token federado fornecido pelo ambiente de identidade da carga de trabalho. |
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
Locatário único com certificado de cliente
Use essas configurações para configurar uma conexão de locatário único que se autentica com um certificado de cliente.
| Nome da Configuração | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
| CLIENTID | String | Nenhum | O ID do cliente (ID do aplicativo) do registro do aplicativo. |
| TENANTID | String | Nenhum | O ID do locatário do Microsoft Entra ID para o registro do aplicativo. |
| AUTHTYPE | String | Nenhum | Defina como Certificate. |
| CERTPEMFILE | String | Nenhum | Caminho para o arquivo de certificado PEM (Privacy-Enhanced Mail). |
| CERTKEYFILE | String | Nenhum | Caminho para o arquivo de chave privada para o certificado. |
| SCOPE | String | Nenhum | Escopo de recurso padrão para solicitar tokens para quando um não for fornecido pelo chamador. |
| AUTORIDADE | String | Nenhum | Quando presente, usado como autoridade para solicitar um token. |
| SENDX5C | booleano | Falso | Habilita o envio do cabeçalho x5c durante a aquisição de token baseada em certificado. |
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=Certificate
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={app-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__TENANTID={tenant-id-guid}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CERTPEMFILE={path-to-pem-file}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CERTKEYFILE={path-to-key-file}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__SCOPE=https://api.botframework.com
Note
O SDK do JS lê o certificado PEM e os arquivos de chave privada diretamente do disco e calcula a impressão digital do certificado automaticamente. O arquivo de chave não deve usar uma senha.
Multitenant com certificado do cliente
Para cenários multilocatários que usam certificado de cliente, defina o endpoint de autoridade para o locatário 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
Compatibilidade retroativa com o SDK do Azure Bot Framework
Para carregar a configuração usando o mesmo formato que o SDK do Azure Bot Framework, use loadPrevAuthConfigFromEnv(): AuthConfiguration.
Use esses nomes de configuração herdados ao migrar as configurações existentes do SDK do Bot Framework.
| Nome da Configuração | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
| MicrosoftAppTenantId | String | Nulo | A ID do locatário do Microsoft Entra ID (formato herdado do SDK do Bot Framework). |
| MicrosoftAppId | String | Nulo | A ID do cliente (ID do aplicativo) do registro do aplicativo (formato herdado do SDK do Bot Framework). |
| MicrosoftAppPassword | String | Nulo | O segredo do aplicativo (formato herdado do SDK do Bot Framework). |
MicrosoftAppTenantId={tenant-id-guid}
MicrosoftAppId={app-id-guid}
MicrosoftAppPassword={app-registration-secret}
Provedor de autenticação personalizado
Os usuários que exigem um provedor de autenticação personalizado podem implementar a interface:
export interface AuthProvider {
getAccessToken: (authConfig: AuthConfiguration, scope: string) => Promise<string>
}
Como exemplo, implemente o 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 instanciar o CloudAdapter por meio do DevTokenProvider
const adapter = new CloudAdapter(authConfig, new DevTokenProvider())
amework.com/.default") retornar tokenResponse.token }
To instantiate the `CloudAdapter` by using the `DevTokenProvider`
```ts
const adapter = new CloudAdapter(authConfig, new DevTokenProvider())
O pacote da Biblioteca do Microsoft Authenticator (MSAL) para o SDK Python Agents fornece ferramentas que ajudam a criar tokens de acesso para clientes de agentes e serviços externos a partir de um agente auto-hospedado do SDK de Agentes do Microsoft 365.
O microsoft-agents-authentication-msal pacote fornece a MsalAuth classe, que é o provedor de autenticação principal. Você pode configurá-lo para os seguintes tipos de credenciais:
- Segredo do cliente
- Certificado do cliente
- Identidade gerenciada atribuída pelo usuário
- Identidade gerenciada atribuída pelo sistema
Instalar o pacote de autenticação
Instale o pacote de autenticação MSAL do PyPI:
pip install microsoft-agents-authentication-msal
Locatário único versus multilocatário
A autenticação por segredo do cliente e por certificado do cliente oferece suporte a configurações de locatário único e multilocatário.
A Identidade Gerenciada Atribuída pelo Usuário e a Identidade Gerenciada Atribuída pelo Sistema só oferecem suporte a configurações de locatário único.
Note
Para usar vários locatários, você precisa configurar a instância do Bot do Azure como multilocatária e o registro do aplicativo no Microsoft Entra ID como Contas em qualquer diretório organizacional (qualquer locatário do Microsoft Entra ID - Multilocatário). Para saber mais, consulte aplicativos únicos e multilocatários.
Configurar uma conexão
A biblioteca de autenticação MSAL permite que você crie e use vários clientes distintos com o mecanismo de hospedagem do Agents Framework. Cada configuração de conexão cria um cliente de autenticação nomeado para dar suporte a comunicações com serviços externos ou outros agentes.
Forneça a configuração por meio de variáveis de ambiente que usam a convenção de nomenclatura de sublinhado duplo (__) para configurações aninhadas. A MsalConnectionManager classe lê essas variáveis para construir AgentAuthConfiguration instâncias para cada conexão nomeada.
Importante
O gerenciador de conexões requer, no mínimo, uma conexão chamada SERVICE_CONNECTION.
Variáveis de ambiente para cada tipo de autenticação
O agente obtém a configuração do MSAL em tempo de execução a partir de variáveis de ambiente usando a função auxiliar load_configuration_from_env().
As seções a seguir descrevem as configurações necessárias para cada um dos tipos de autenticação com suporte, juntamente com trechos de variável de ambiente de exemplo para cada tipo.
Locatário único com segredo do cliente
Use essas configurações para configurar uma conexão de locatário único que se autentica com um segredo do cliente.
| Nome da Configuração | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
| CLIENTID | String | Nenhum | O ID do cliente (ID do aplicativo) do registro do aplicativo. |
| CLIENTSECRET | String | Nenhum | O segredo associado ao registro do aplicativo. Use apenas para fins de teste e desenvolvimento. |
| TENANTID | String | Nenhum | O ID do locatário do Microsoft Entra ID para o registro do aplicativo. |
| AUTHTYPE | String | ClientSecret | O tipo de autenticação. Defina como ClientSecret. |
| ESCOPOS | Lista da cadeia de caracteres | Nenhum | Lista padrão de escopos para os qual solicitar tokens. É usado somente quando nenhum escopo é fornecido na solicitação de conexão do agente. |
| AUTORIDADE | String | Nenhum | Quando presente, usado como autoridade para solicitar um token. Se não estiver definida, o padrão será 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}
Tenant único com segredo do cliente é a configuração recomendada para desenvolvimento local.
Multitenant com o segredo do cliente
Para cenários multitenant que usam um segredo do aplicativo, defina o endpoint de autoridade para o locatário botframework.com:
| Nome da Configuração | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
| CLIENTID | String | Nenhum | O ID do cliente (ID do aplicativo) do registro do aplicativo. |
| CLIENTSECRET | String | Nenhum | O segredo associado ao registro do aplicativo. Use apenas para fins de teste e desenvolvimento. |
| AUTHTYPE | String | ClientSecret | O tipo de autenticação. Defina como ClientSecret. |
| AUTORIDADE | String | Nenhum | Defina como https://login.microsoftonline.com/botframework.com para multitenant. |
| ESCOPOS | Lista da cadeia de caracteres | Nenhum | Lista padrão de escopos para os qual 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
Identidade gerenciada atribuída pelo usuário
Use essas configurações para configurar a aquisição de token com uma identidade gerenciada atribuída pelo usuário.
| Nome da Configuração | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
| CLIENTID | String | Nenhum | A ID do cliente de identidade gerenciada a ser usada ao criar o token de acesso. |
| AUTHTYPE | String | ClientSecret | O tipo de autenticação. Defina como UserManagedIdentity. |
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={managed-identity-client-id}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=UserManagedIdentity
A Identidade Gerenciada é a configuração recomendada para cenários de produção. Para saber mais, confira identidades gerenciadas para recursos do Azure.
Note
Se você usar tipos de identidade gerenciada, seu host ou cliente deverá ser executado em um serviço Azure configurado com uma identidade gerenciada atribuída pelo sistema ou atribuída pelo usuário. Para ver quais serviços do Azure dão suporte a identidades gerenciadas, consulte identidades gerenciadas para recursos do Azure.
Identidade gerenciada atribuída pelo sistema
Se você usar o tipo SystemManagedIdentityde autenticação, a ID do cliente será ignorada e a identidade gerenciada pelo sistema para o serviço será usada.
| Nome da Configuração | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
| AUTHTYPE | String | ClientSecret | O tipo de autenticação. Defina como SystemManagedIdentity. |
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=SystemManagedIdentity
Note
Se você usar tipos de identidade gerenciada, seu host ou cliente deverá ser executado em um serviço Azure configurado com uma identidade gerenciada atribuída pelo sistema ou atribuída pelo usuário. Para ver quais serviços do Azure dão suporte a identidades gerenciadas, consulte identidades gerenciadas para recursos do Azure.
Locatário único com certificado de cliente
Use essas configurações para configurar uma conexão de locatário único que se autentica com um certificado de cliente.
| Nome da Configuração | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
| CLIENTID | String | Nenhum | O ID do cliente (ID do aplicativo) do registro do aplicativo. |
| TENANTID | String | Nenhum | O ID do locatário do Microsoft Entra ID para o registro do aplicativo. |
| AUTHTYPE | String | ClientSecret | O tipo de autenticação. Defina como certificate. |
| CERTPEMFILE | String | Nenhum | Caminho para o arquivo de certificado PEM (Privacy-Enhanced Mail). |
| CERTKEYFILE | String | Nenhum | Caminho para o arquivo de chave privada para o certificado. |
| ESCOPOS | Lista da cadeia de caracteres | Nenhum | Lista padrão de escopos para os qual solicitar tokens. |
| AUTORIDADE | String | Nenhum | Quando presente, usado como autoridade para solicitar um 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}
Note
O SDK do Python lê o certificado PEM e os arquivos de chave privada diretamente do disco e calcula a impressão digital do certificado automaticamente. O arquivo de chave não deve usar uma senha.
Multilocatário com certificado do cliente
Para cenários multitenant que usam certificado de cliente, defina o endpoint de autoridade para o locatário 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 o gerenciador de conexões
A MsalConnectionManager classe pode gerenciar várias conexões de autenticação para seu agente. Ele lê as configurações de conexão e cria MsalAuth instâncias para cada conexão nomeada.
Veja um exemplo de como configurar o gerenciador de conexões e iniciar seu 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 o exemplo de início rápido Python para obter um exemplo completo de como usar o MsalConnectionManager em um agente de Python.
Provedor de autenticação personalizado
Os usuários que exigem um provedor de autenticação personalizado podem implementar a AccessTokenProviderBase classe 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
Suporte ao registro em log para autenticação
O sistema de autenticação MSAL usa o módulo padrão do Python logging com o nome do logger microsoft_agents.authentication.msal. Para habilitar o registro detalhado em log dos fluxos de autenticação para solucionar problemas na obtenção de token, configure o logger em seu aplicativo:
import logging
logging.basicConfig(level=logging.WARNING)
logging.getLogger("microsoft_agents.authentication.msal").setLevel(logging.DEBUG)
Melhores práticas de segurança
- Armazene segredos em Azure Key Vault ou variáveis de ambiente; nunca confirme-os no código-fonte.
- Use identidades gerenciadas quando possível, pois eliminam a necessidade de gerenciar segredos.
- Regularmente, alterne os segredos e os certificados do cliente.
- Use o princípio de privilégio mínimo para escopos e permissões.