Configurar autenticação em seu agente

Com os recursos do Serviço de Bot do Azure provisionados, você pode configurar o seu agente para autenticar com o Serviço de Bot do Azure. O SDK de Agentes do Microsoft 365 oferece opções flexíveis para configuração de autenticação, permitindo que você escolha o método que melhor atende às necessidades e aos requisitos de segurança do seu aplicativo.

O pacote MSAL (Biblioteca de Autenticação da Microsoft) do SDK de Agentes para .NET fornece ferramentas que ajudam você a criar tokens de acesso para clientes de agente e serviços externos usando um agente auto-hospedado do SDK de Agentes do Microsoft 365.

O pacote Microsoft.Agents.Athentication.Msal fornece a classe MsalAuth, que é o provedor principal de autenticação. Você pode configurá-lo para os seguintes tipos de credencial:

  • Locatário único com segredo do cliente e Multilocatário com segredo do cliente
  • Certificado do cliente usando Impressão digital
  • Certificado do cliente usando o nome da entidade (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 vs multilocatário

A autenticação de segredo do cliente dá suporte a configurações de locatário único e multilocatário.

Observação

Para multilocatário, você precisa configurar a instância do Bot do Azure como multilocatário e o registro do aplicativo do 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 do

O pacote de autenticação MSAL permite que você crie e use vários clientes distintos com o mecanismo de hospedagem da Estrutura de Agentes. Ao utilizar a biblioteca de autenticação MSAL, você pode fornecer múltiplas 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 MSAL no runtime a partir das variáveis de ambiente.

As próximas seções descrevem as configurações obrigatórias e opcionais para cada um dos tipos de autenticação compatíveis com MSAL, acompanhadas de exemplos de configuração para cada tipo.

Locatário único com segredo do cliente

Use estas configurações para definir uma conexão de locatário único que autentica com um segredo do cliente.

Nome da Configuração Tipo Valor padrão descrição
ClientId Cadeia de caracteres Nulo ClientId (AppId) a ser usado ao criar o Token de acesso.
ClientSecret string (cadeia de caracteres) Nulo Quando AuthType é ClientSecret, é segredo associado ao cliente, isso só deve ser usado para fins de teste e desenvolvimento.
AuthorityEndpoint Cadeia de caracteres Nulo Quando presente, usado como Autoridade para solicitar um token.
TenantId Cadeia de caracteres 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 único 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"
          ],
      }
    }
  }

Multilocatário com segredo do cliente

Use estas configurações para definir uma conexão de multilocatário que autentica com um segredo do cliente.

Nome da Configuração Tipo Valor padrão descrição
ClientId Cadeia de caracteres Nulo ClientId (AppId) a ser usado ao criar o Token de acesso.
ClientSecret string (cadeia de caracteres) Nulo Quando AuthType é ClientSecret, é segredo associado ao cliente, isso só deve ser usado para fins de teste e desenvolvimento.
AuthorityEndpoint Cadeia de caracteres Nulo Quando presente, usado como Autoridade para solicitar um token.
TenantId Cadeia de caracteres 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

Veja 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

Utilize estas configurações para definir a aquisição de tokens com uma identidade gerenciada atribuída pelo usuário.

Nome da Configuração Tipo Valor padrão descrição
ClientId Cadeia de caracteres Nulo ClientId da Identidade Gerenciada a ser usado ao criar o Token de acesso.

Observação

Quando desejar usar os tipos de identidade gerenciada em seu agente, você precisará executar seu 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.

Observação

Quando desejar usar os tipos de identidade gerenciada em seu agente, você precisará executar seu 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 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 estas configurações para definir uma conexão que realiza a troca de credenciais federadas por tokens de acesso.

Nome da Configuração Tipo Valor padrão descrição
ClientId Cadeia de caracteres Nulo ClientId (AppId) a ser usado ao criar o Token de acesso.
AuthorityEndpoint Cadeia de caracteres Nulo Quando presente, usado como Autoridade para solicitar um token.
TenantId Cadeia de caracteres 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 Cadeia de caracteres 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 estas configurações para definir a autenticação da identidade de carga de trabalho usando um arquivo de token federado.

Nome da Configuração Tipo Valor padrão descrição
ClientId Cadeia de caracteres Nulo ClientId (AppId) a ser usado ao criar o Token de acesso.
AuthorityEndpoint Cadeia de caracteres Nulo Quando presente, usado como Autoridade para solicitar um token.
TenantId Cadeia de caracteres 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 Cadeia de caracteres Nulo O arquivo de token (o mesmo que AKS AZURE_FEDERATED_TOKEN_FILE env var)

Aqui está um exemplo de appsettings para locatário único 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"
        ]
      }
    }
  }

Opções de declaração de cliente de identidade de carga de trabalho ou de credenciais federadas opcionais

Use estas configurações opcionais para personalizar o conteúdo da declaração do cliente em fluxos de identidade de carga de trabalho ou credenciais federadas.

Nome da Configuração Tipo Valor padrão descrição
ClientId Cadeia de caracteres Nulo ID do Cliente para a qual uma declaração assinada é solicitada
TokenEndpoint Cadeia de caracteres Nulo O ponto de extremidade de token pretendido
Reclamações Cadeia de caracteres Nulo Declarações a serem incluídas na declaração do cliente
ClientCapabilities Cadeia de caracteres[] Nulo Funcionalidades 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 usando o nome da entidade (incluindo SN+I)

Use essas configurações para definir a autenticação baseada em certificado pelo nome da entidade do certificado, incluindo cenários SN+I.

AuthType Tipo Valor padrão descrição
AuthorityEndpoint Cadeia de caracteres Nulo Quando presente, usado como Autoridade para solicitar um token.
TenantId Cadeia de caracteres 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 Cadeia de caracteres Nulo ClientId (AppId) a ser usado ao criar o Token de acesso.
CertSubjectName Cadeia de caracteres Nulo Quando AuthType é CertificateSubjectName, esse é o nome do assunto que é procurado
CertStoreName Cadeia de caracteres "Meu" Quando AuthType é CertificateSubjectName ou Certificate, indica em qual repositório de certificados procurar
ValidCertificateOnly bool Verdadeiro 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 appsettings para Nome da Entidade 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 definir a autenticação baseada em certificado por impressão digital do certificado.

AuthType Tipo Valor padrão descrição
AuthorityEndpoint Cadeia de caracteres Nulo Quando presente, usado como Autoridade para solicitar um token.
TenantId Cadeia de caracteres 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 Cadeia de caracteres Nulo ClientId (AppId) a ser usado ao criar o Token de acesso.
CertThumbprint Cadeia de caracteres Nulo Impressão digital do certificado a ser carregado, válida somente quando AuthType é definido como Certificado
CertStoreName Cadeia de caracteres "Meu" Quando AuthType é CertificateSubjectName ou Certificate, indica em qual repositório de certificados procurar
ValidCertificateOnly bool Verdadeiro 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 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 MSAL padrão para um host ASP.NET principal em uma classe Program.cs:

Isso é gerenciado pela instância IConnections registrada. A instância IConnections é adicionada por padrão quando você usa AddAgent.

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

No entanto, caso não esteja usando AddAgent, você deverá registrar explicitamente a instância IConnections.

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

Mais opções de configuração do 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 das solicitações MSAL, o comportamento de repetição e o nível de detalhamento dos logs.

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 do Microsoft Entra ID após o envio de 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 Esta configuração controla se o MSAL fornece ao logger anexado dados pessoais.

Essas configurações são compartilhadas com todos os clientes que criam usando o Provedor de Autenticação MSAL. Essas configurações devem ser lidas de um Leitor de IConfiguration, em uma seção de configuração chamada "MSALConfiguration".

Observação

MSALConfiguration é uma configuração opcional. Se você não definir essa configuração, serão usadas as configurações padrão para esses valores.

Aqui está um exemplo da entrada em um arquivo appsettings.json:

{
  "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" no objeto IConfiguration 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 registro em log, adicione uma entrada de Microsoft.Agents.Authentication.Msal às configurações do aplicativo para configurar um ILogger que vai relatar as operações de token das suas conexões. Se você adicionar a opção MSALEnabledLogPII, isso também incluirá dados pessoais da sua conexão.

Aqui está um exemplo do bloco de registro em log neste 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 Tokens Web JSON (JWT) e enviar atividades para o canal de destino. Para obter mais informações, consulte Tokens de acesso no plataforma de identidade da Microsoft.

O pacote @microsoft/agents-hosting fornece um provedor de autenticação padrão baseado na MSAL (Biblioteca de Autenticação da Microsoft). 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 a partir do npm:

npm install @microsoft/agents-hosting

Locatário único vs. multilocatário

A autenticação de segredo do cliente e certificado do cliente dá suporte a configurações tanto de locatário único quanto em multilocatário.

Identidade Gerenciada Atribuída pelo Usuário, Identidade Gerenciada do Sistema, Credenciais Federadas e Identidade da Carga de Trabalho só suportam configurações de locatário único.

Observação

Para multilocatário, você precisa configurar a instância do Bot do Azure como multilocatário e o registro do aplicativo do 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 do

A biblioteca de autenticação MSAL permite que você crie e use vários clientes distintos com o mecanismo de hospedagem Estrutura de Agentes. Ao utilizar a biblioteca de autenticação MSAL, você pode fornecer múltiplas 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 suportar comunicações com serviços externos ou outros agentes.

As seções a seguir descrevem as configurações obrigatórias e opcionais para cada um dos tipos de autenticação suportados pelo provedor de autenticação MSAL. Elas também incluem exemplos de trechos de configuração para cada tipo.

Variáveis de ambiente para cada tipo de autenticação

O agente obtém a configuração da MSAL no runtime a partir das variáveis de ambiente usando a função auxiliar loadAuthConfigFromEnv(): AuthConfiguration. O CloudAdapter é inicializado com o AuthConfiguration.

As configurações de conexão usam o formato CONNECTIONS__<CONNECTION_NAME>__SETTINGS__<PROPERTY>.

Quando AUTHTYPE está presente, o SDK usa esse valor para selecionar o fluxo de aquisição do token. Quando AUTHTYPE é omitido, o SDK retorna ao comportamento herdado e infere o fluxo de autenticação a partir das propriedades de credenciais configuradas.

Locatário único com segredo do cliente

Use estas configurações para definir uma conexão de locatário único que autentica com um segredo do cliente.

Nome da Configuração Tipo Valor padrão descrição
CLIENTID Cadeia de caracteres Nenhum A ID do cliente (ID do aplicativo) do registro do aplicativo.
CLIENTSECRET Cadeia de caracteres Nenhum O segredo associado ao registro do aplicativo. Use somente para fins de teste e desenvolvimento.
TENANTID Cadeia de caracteres Nenhum O ID do locatário do Microsoft Entra ID para o registro do aplicativo.
AUTHTYPE Cadeia de caracteres Nenhum Defina como ClientSecret.
ESCOPO Cadeia de caracteres Nenhum Escopo de recurso padrão para solicitar tokens para quando um não for fornecido pelo chamador.
AUTHORITY Cadeia de caracteres Nenhum Quando presente, usado como a 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 ponto de extremidade de autoridade para o locatário botframework.com:

Nome da Configuração Tipo Valor padrão descrição
CLIENTID Cadeia de caracteres Nenhum A ID do cliente (ID do aplicativo) do registro do aplicativo.
CLIENTSECRET Cadeia de caracteres Nenhum O segredo associado ao registro do aplicativo. Use somente para fins de teste e desenvolvimento.
AUTHTYPE Cadeia de caracteres Nenhum Defina como ClientSecret.
AUTHORITY Cadeia de caracteres Nenhum Definido como https://login.microsoftonline.com/botframework.com para multilocatário.
ESCOPO Cadeia de caracteres 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 definir aquisições de tokens com uma Identidade Gerenciada Atribuída pelo Usuário.

Nome da Configuração Tipo Valor padrão descrição
CLIENTID Cadeia de caracteres Nenhum A ID do cliente da identidade gerenciada a ser usada ao criar o token de acesso.
AUTHTYPE Cadeia de caracteres Nenhum Defina como UserManagedIdentity.
ESCOPO Cadeia de caracteres 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

Identidade Gerenciada é a configuração recomendada para cenários de produção. Para saber mais, confira Identidades gerenciadas para os recursos do Azure.

Observação

Se você usar tipos de identidade gerenciada, seu host ou cliente deverá ser executado em um serviço do Azure configurado com uma identidade gerenciada atribuída pelo sistema ou atribuída pelo usuário. Para saber quais serviços do Azure oferecem suporte a identidades gerenciadas, consulte Identidades gerenciadas para recursos do Azure.

SystemManagedIdentity

Se você usar o tipo de autenticação SystemManagedIdentity, 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 Cadeia de caracteres Nenhum Defina como SystemManagedIdentity.
ESCOPO Cadeia de caracteres 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

Observação

Se você usar tipos de identidade gerenciada, seu host ou cliente deverá ser executado em um serviço do Azure configurado com uma identidade gerenciada atribuída pelo sistema ou atribuída pelo usuário. Para saber quais serviços do Azure oferecem suporte a identidades gerenciadas, consulte Identidades gerenciadas para recursos do Azure.

FederatedCredentials

Use estas configurações para definir um aplicativo de locatário único que autentica por meio de Credenciais Federadas.

Nome da Configuração Tipo Valor padrão descrição
CLIENTID Cadeia de caracteres Nenhum A ID do cliente (ID do aplicativo) do registro do aplicativo.
TENANTID Cadeia de caracteres Nenhum O ID do locatário do Microsoft Entra ID para o registro do aplicativo.
AUTHTYPE Cadeia de caracteres Nenhum Defina como FederatedCredentials.
AUTHORITY Cadeia de caracteres Nenhum Quando presente, usado como a autoridade para solicitar um token. Se não estiver definida, o padrão será https://login.microsoftonline.com/{TENANTID}.
ESCOPO Cadeia de caracteres Nenhum Escopo de recurso padrão para solicitar tokens para quando um não for fornecido pelo chamador.
FICCLIENTID Cadeia de caracteres Nenhum A ID do cliente da identidade gerenciada usada para obter o token externo de 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 mais informações, veja Autenticação usando Credenciais de Identidade Federada.

WorkloadIdentity

Use essas configurações para definir a aquisição de tokens por meio da Identidade de Carga de Trabalho do Microsoft Entra.

Nome da Configuração Tipo Valor padrão descrição
AUTHTYPE Cadeia de caracteres Nenhum Defina como WorkloadIdentity.
CLIENTID Cadeia de caracteres Nenhum A ID do cliente (ID do aplicativo) do registro do aplicativo.
TENANTID Cadeia de caracteres Nenhum O ID do locatário do Microsoft Entra ID para o registro do aplicativo.
AUTHORITY Cadeia de caracteres Nenhum Quando presente, usado como a autoridade para solicitar um token. Se não estiver definida, o padrão será https://login.microsoftonline.com/{TENANTID}.
ESCOPO Cadeia de caracteres Nenhum Escopo de recurso padrão para solicitar tokens para quando um não for fornecido pelo chamador.
FEDERATEDTOKENFILE Cadeia de caracteres 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 do cliente

Use estas configurações para definir uma conexão de locatário único que autentica com um certificado do cliente.

Nome da Configuração Tipo Valor padrão descrição
CLIENTID Cadeia de caracteres Nenhum A ID do cliente (ID do aplicativo) do registro do aplicativo.
TENANTID Cadeia de caracteres Nenhum O ID do locatário do Microsoft Entra ID para o registro do aplicativo.
AUTHTYPE Cadeia de caracteres Nenhum Defina como Certificate.
CERTPEMFILE Cadeia de caracteres Nenhum Caminho para o arquivo de certificado do PEM (Privacy Enhanced Mail).
CERTKEYFILE Cadeia de caracteres Nenhum Caminho para o arquivo de chave privada do certificado.
ESCOPO Cadeia de caracteres Nenhum Escopo de recurso padrão para solicitar tokens para quando um não for fornecido pelo chamador.
AUTHORITY Cadeia de caracteres Nenhum Quando presente, usado como a autoridade para solicitar um token.
SENDX5C Booliano Falso Habilita o envio do cabeçalho x5c durante a aquisição de token usando 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

Observação

O SDK JS lê os arquivos de certificado PEM e de chave privada diretamente no disco e calcula automaticamente a impressão digital do certificado. O arquivo de chave não deve usar senha.

Multilocatário com certificado do cliente

Para cenários multilocatário que usam um certificado do cliente, defina o ponto de extremidade 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 com versões anteriores do SDK do Azure Bot Framework

Para carregar a configuração usando o mesmo formato do SDK do Azure Bot Framework, use loadPrevAuthConfigFromEnv(): AuthConfiguration.

Ao migrar configurações existentes do SDK do Bot Framework, use estes nomes de configuração legados.

Nome da Configuração Tipo Valor padrão descrição
MicrosoftAppTenantId Cadeia de caracteres Nulo A ID do locatário do Microsoft Entra ID (formato herdado do SDK do Bot Framework).
MicrosoftAppId Cadeia de caracteres Nulo A ID do cliente (ID do aplicativo) do registro do aplicativo (formato herdado do SDK do Bot Framework).
MicrosoftAppPassword Cadeia de caracteres Nulo O segredo do aplicativo (formato legado do SDK do Bot Framework).
MicrosoftAppTenantId={tenant-id-guid}
MicrosoftAppId={app-id-guid}
MicrosoftAppPassword={app-registration-secret}

Provedor de autenticação personalizado

Usuários que precisam de 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 usando o DevTokenProvider

const adapter = new CloudAdapter(authConfig, new DevTokenProvider())

amework.com/.default") return tokenResponse.token }


To instantiate the `CloudAdapter` by using the `DevTokenProvider`

```ts
const adapter = new CloudAdapter(authConfig, new DevTokenProvider())

O pacote MSAL (Biblioteca de Autenticação da Microsoft) do SDK de Agentes para Python fornece ferramentas que ajudam você a criar tokens de acesso para clientes de agente e serviços externos usando um agente auto-hospedado do SDK de Agentes do Microsoft 365.

O pacote microsoft-agents-authentication-msal fornece a classe MsalAuth, que é o provedor principal de autenticação. Você pode configurá-lo para os seguintes tipos de credencial:

  • 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 vs multilocatário

A autenticação de segredo do cliente e certificado do cliente dá suporte a configurações tanto de locatário único quanto em multilocatário.

Identidade Gerenciada Atribuída pelo Usuário e Identidade Gerenciada Atribuída pelo Sistema suportam apenas configurações de locatário único.

Observação

Para multilocatário, você precisa configurar a instância do Bot do Azure como multilocatário e o registro do aplicativo do 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 do

A biblioteca de autenticação MSAL permite que você crie e use vários clientes distintos com o mecanismo de hospedagem da Estrutura de Agentes. Cada configuração de conexão cria um cliente de autenticação nomeado para suportar 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 classe MsalConnectionManager lê essas variáveis para criar instâncias AgentAuthConfiguration 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 de MSAL no runtime 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 suportados, com exemplos de trechos de variáveis de ambiente para cada tipo.

Locatário único com segredo do cliente

Use estas configurações para definir uma conexão de locatário único que autentica com um segredo do cliente.

Nome da Configuração Tipo Valor padrão descrição
CLIENTID Cadeia de caracteres Nenhum A ID do cliente (ID do aplicativo) do registro do aplicativo.
CLIENTSECRET Cadeia de caracteres Nenhum O segredo associado ao registro do aplicativo. Use somente para fins de teste e desenvolvimento.
TENANTID Cadeia de caracteres Nenhum O ID do locatário do Microsoft Entra ID para o registro do aplicativo.
AUTHTYPE Cadeia de caracteres ClientSecret O tipo de autenticação. Defina como ClientSecret.
SCOPES Lista da cadeia de caracteres Nenhum Lista padrão de escopos para os quais solicitar tokens. Usado somente quando nenhum escopo é passado da solicitação de conexão do agente.
AUTHORITY Cadeia de caracteres Nenhum Quando presente, usado como a 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}

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 ponto de extremidade de autoridade para o locatário botframework.com:

Nome da Configuração Tipo Valor padrão descrição
CLIENTID Cadeia de caracteres Nenhum A ID do cliente (ID do aplicativo) do registro do aplicativo.
CLIENTSECRET Cadeia de caracteres Nenhum O segredo associado ao registro do aplicativo. Use somente para fins de teste e desenvolvimento.
AUTHTYPE Cadeia de caracteres ClientSecret O tipo de autenticação. Defina como ClientSecret.
AUTHORITY Cadeia de caracteres Nenhum Definido como https://login.microsoftonline.com/botframework.com para multilocatário.
SCOPES Lista da cadeia de caracteres Nenhum Lista padrão de escopos para os quais 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

Utilize estas configurações para definir a aquisição de tokens com uma identidade gerenciada atribuída pelo usuário.

Nome da Configuração Tipo Valor padrão descrição
CLIENTID Cadeia de caracteres Nenhum A ID do cliente da identidade gerenciada a ser usada ao criar o token de acesso.
AUTHTYPE Cadeia de caracteres ClientSecret O tipo de autenticação. Defina como UserManagedIdentity.
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID={managed-identity-client-id}
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=UserManagedIdentity

Identidade Gerenciada é a configuração recomendada para cenários de produção. Para saber mais, confira Identidades gerenciadas para os recursos do Azure.

Observação

Se você usar tipos de identidade gerenciada, seu host ou cliente deverá ser executado em um serviço do Azure configurado com uma identidade gerenciada atribuída pelo sistema ou atribuída pelo usuário. Para saber quais serviços do Azure oferecem suporte a identidades gerenciadas, consulte Identidades gerenciadas para recursos do Azure.

Identidade gerenciada atribuída pelo sistema

Se você usar o tipo de autenticação SystemManagedIdentity, 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 Cadeia de caracteres ClientSecret O tipo de autenticação. Defina como SystemManagedIdentity.
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__AUTHTYPE=SystemManagedIdentity

Observação

Se você usar tipos de identidade gerenciada, seu host ou cliente deverá ser executado em um serviço do Azure configurado com uma identidade gerenciada atribuída pelo sistema ou atribuída pelo usuário. Para saber quais serviços do Azure oferecem suporte a identidades gerenciadas, consulte Identidades gerenciadas para recursos do Azure.

Locatário único com certificado do cliente

Use estas configurações para definir uma conexão de locatário único que autentica com um certificado do cliente.

Nome da Configuração Tipo Valor padrão descrição
CLIENTID Cadeia de caracteres Nenhum A ID do cliente (ID do aplicativo) do registro do aplicativo.
TENANTID Cadeia de caracteres Nenhum O ID do locatário do Microsoft Entra ID para o registro do aplicativo.
AUTHTYPE Cadeia de caracteres ClientSecret O tipo de autenticação. Defina como certificate.
CERTPEMFILE Cadeia de caracteres Nenhum Caminho para o arquivo de certificado do PEM (Privacy Enhanced Mail).
CERTKEYFILE Cadeia de caracteres Nenhum Caminho para o arquivo de chave privada do certificado.
SCOPES Lista da cadeia de caracteres Nenhum Lista padrão de escopos para os quais solicitar tokens.
AUTHORITY Cadeia de caracteres Nenhum Quando presente, usado como a 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}

Observação

O SDK do Python lê o certificado PEM e os arquivos de chave privada diretamente no disco e calcula automaticamente a impressão digital do certificado. O arquivo de chave não deve usar senha.

Multilocatário com certificado do cliente

Para cenários multilocatário que usam um certificado do cliente, defina o ponto de extremidade 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 classe MsalConnectionManager pode gerenciar múltiplas conexões de autenticação para seu agente. Ela lê as configurações de conexão e cria instâncias de MsalAuth para cada conexão nomeada.

Aqui está 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()
)

Confira o exemplo de início rápido do Python para ver um exemplo completo de como usar o MsalConnectionManager em um agente Python.

Provedor de autenticação personalizado

Usuários que precisam de um provedor de autenticação personalizado podem implementar a classe 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

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 dos fluxos de autenticação para solucionar problemas na aquisição de tokens, configure o logger em seu aplicativo:

import logging

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

Práticas recomendadas de segurança

  • Armazene segredos no Azure Key Vault ou em variáveis de ambiente; nunca confirme-os no código-fonte.
  • Use identidades gerenciadas sempre que possível, pois eliminam a necessidade de gerenciar segredos.
  • Rotacione regularmente os segredos e certificados do cliente.
  • Use o princípio de privilégio mínimo para escopos e permissões.