Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O fornecedor de autenticação da Biblioteca de autenticação da Microsoft (MSAL) do SDK de Agentes do .NET é um utilitário que ajuda a criar tokens de acesso para clientes de agente e serviços externos a partir de um agente autoalojado do SDK de Agentes do Microsoft 365.
Este utilitário suporta vários perfis distintos que podem ser usados para criar tokens de acesso. Cada token de acesso pode ser criado usando um dos seguintes tipos de autenticação:
- Inquilino único com ClientSecret e Multitenant com ClientSecret
- Certificado de cliente usando thumbprint
- Certificado de cliente usando o nome do assunto (incluindo SN+I)
- Utilizar identidade gerida
- Identidade gerida pelo sistema
- Credenciais federadas
- Identidade da carga de trabalho
Configurar uma conexão
O fornecedor de autenticação MSAL permite-lhe criar e usar múltiplos clientes distintos com o motor de alojamento Agents Framework. Com o fornecedor de autenticação MSAL, pode fornecer múltiplas configurações de ligação no ficheiro de configuração da aplicação. Cada configuração de ligação pode ser usada para criar um cliente de autenticação nomeado para suportar comunicações com serviços externos ou outros agentes.
As secções seguintes descrevem as definições de configuração obrigatórias e opcionais para cada um dos tipos de autenticação suportados pelo fornecedor de autenticação MSAL, juntamente com exemplos de excertos de configuração para cada tipo.
Inquilino único com ClientSecret
| Nome da configuração | Tipo | Valor padrão | Description |
|---|---|---|---|
| ID do Cliente | Corda | Nulo | ClientId (AppId) para usar ao criar o token de acesso. |
| ClientSecret | cadeia (de caracteres) | Nulo | Quando AuthType é ClientSecret, Is Secret associado ao cliente, isso só deve ser usado para fins de teste e desenvolvimento. |
| AuthorityEndpoint | Corda | Nulo | Quando presente, é utilizado como Autoridade para solicitar um token. |
| Id de Inquilino | Corda | Nulo | Quando presente e AuthorityEndpoint é nulo, usado para criar uma Autoridade para solicitar um token |
| Alcances | Lista de cadeias | Nulo | Listas predefinidas de âmbitos para solicitar tokens. Só é usado quando nenhum âmbito é transmitido do pedido de ligação do agente |
Aqui está um exemplo de configurações de aplicação para inquilino ú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"
],
}
}
}
Multi-inquilino com ClientSecret
| Nome da configuração | Tipo | Valor padrão | Description |
|---|---|---|---|
| ID do Cliente | Corda | Nulo | ClientId (AppId) para usar ao criar o token de acesso. |
| ClientSecret | cadeia (de caracteres) | Nulo | Quando AuthType é ClientSecret, Is Secret associado ao cliente, isso só deve ser usado para fins de teste e desenvolvimento. |
| AuthorityEndpoint | Corda | Nulo | Quando presente, é utilizado como Autoridade para solicitar um token. |
| Id de Inquilino | Corda | Nulo | Quando presente e AuthorityEndpoint é nulo, usado para criar uma Autoridade para solicitar um token |
| Alcances | Lista de cadeias | Nulo | Listas predefinidas de âmbitos para solicitar tokens. Só é usado quando nenhum âmbito é transmitido do pedido de ligação do agente |
Aqui está um exemplo de appsettings para multi-inquilino com ClientSecret:
"Connections": {
"ServiceConnection": {
"Settings": {
"AuthType": "ClientSecret",
"ClientId": "{{BOT_ID}}",
"ClientSecret": "{{BOT_SECRET}}",
"AuthorityEndpoint": "https://login.microsoftonline.com/botframework.com",
"Scopes": [
"https://api.botframework.com/.default"
],
}
}
}
UserManagedIdentity
| Nome da configuração | Tipo | Valor padrão | Description |
|---|---|---|---|
| ID do Cliente | Corda | Nulo | ClientId da Identidade Gerida para usar ao criar o token de acesso. |
Observação
Ao usar os tipos de identidade geridos, o seu host ou cliente deve estar a executar um serviço do Azure e ter configurado esse serviço com uma identidade gerida designada pelo sistema (System-Assigned Managed identity) ou uma identidade gerida designada pelo utilizador (User-Assigned Managed identity).
Aqui está um exemplo de appsettings para UserManagedIdentity:
"Connections": {
"ServiceConnection": {
"Settings": {
"AuthType": "UserManagedIdentity",
"ClientId": "{{BOT_ID}}",
"Scopes": [
"https://api.botframework.com/.default"
]
}
}
}
SystemManagedIdentity
Ao usar o tipo SystemManagedIdentityde autenticação , o ID do cliente é ignorado e a identidade gerida pelo sistema para o serviço é utilizada.
Observação
Ao utilizar tipos de identidade gerida, o host ou cliente deve estar a operar com um serviço da Azure e ter esse serviço configurado com uma identidade gerida atribuída pelo sistema (System-Assigned) ou uma identidade gerida atribuída pelo usuário (User-Assigned).
Aqui está um exemplo de appsettings para SystemManagedIdentity o tipo de autenticação:
"Connections": {
"ServiceConnection": {
"Settings": {
"AuthType": "SystemManagedIdentity",
"Scopes": [
"https://api.botframework.com/.default"
]
}
}
}
FederatedCredentials
| Nome da configuração | Tipo | Valor padrão | Description |
|---|---|---|---|
| ID do Cliente | Corda | Nulo | ClientId (AppId) para usar ao criar o token de acesso. |
| AuthorityEndpoint | Corda | Nulo | Quando presente, é utilizado como Autoridade para solicitar um token. |
| Id de Inquilino | Corda | Nulo | Quando presente e AuthorityEndpoint é nulo, usado para criar uma Autoridade para solicitar um token |
| Alcances | Lista de cadeias | Nulo | Listas predefinidas de âmbitos para solicitar tokens. Só é usado quando nenhum âmbito é transmitido do pedido de ligação do agente |
| FederatedClientId | Corda | Nulo | ClientId da Identidade Gerida para usar ao criar o token de acesso. |
Aqui está um exemplo de appsettings para FederatedCredentials:
"Connections": {
"ServiceConnection": {
"Settings": {
"AuthType": "FederatedCredentials",
"ClientId": "{{BOT_ID}}",
"AuthorityEndpoint": "https://login.microsoftonline.com/{{BOT_TENANT_ID}}",
"FederatedClientId": "{{BOT_FEDERATED_ID}}",
"Scopes": [
"https://api.botframework.com/.default"
]
}
}
}
WorkloadIdentity
| Nome da configuração | Tipo | Valor padrão | Description |
|---|---|---|---|
| ID do Cliente | Corda | Nulo | ClientId (AppId) para usar ao criar o token de acesso. |
| AuthorityEndpoint | Corda | Nulo | Quando presente, é utilizado como Autoridade para solicitar um token. |
| Id de Inquilino | Corda | Nulo | Quando presente e AuthorityEndpoint é nulo, usado para criar uma Autoridade para solicitar um token |
| Alcances | Lista de cadeias | Nulo | Listas predefinidas de âmbitos para solicitar tokens. Só é usado quando nenhum âmbito é transmitido do pedido de ligação do agente |
| FederatedTokenFile | Corda | Nulo | O ficheiro de token (o mesmo que AKS AZURE_FEDERATED_TOKEN_FILE env var) |
Aqui está um exemplo de configurações de aplicação para inquilino ú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 opcionais de asserção de cliente de Credenciais Federadas ou Identidade de Carga de Trabalho
| Nome da configuração | Tipo | Valor padrão | Description |
|---|---|---|---|
| ID do Cliente | Corda | Nulo | ID do cliente para o qual uma asserção assinada é solicitada |
| TokenEndpoint | Corda | Nulo | O ponto final de token pretendido |
| Claims | Corda | Nulo | Afirmações a serem incluídas na asserção do cliente |
| ClientCapabilities | Cadeia[] | Nulo | Capacidades que a aplicação cliente declarou. |
"Connections": {
"ServiceConnection": {
"Settings": {
"AuthType": "WorkloadIdentity",
"ClientId": "{{BOT_ID}}",
"AuthorityEndpoint": "https://login.microsoftonline.com/{{BOT_TENANT_ID}}",
"FederatedTokenFile": "{{BOT_FEDERATED_TOKENFILE}}",
"Scopes": [
"https://api.botframework.com/.default"
],
"AssertionRequestOptions": {
"ClientId": null,
"TokenEndpoint": null,
"Claims": null,
"ClientCapabilities": null,
}
}
}
}
CertificateSubjectName
| Tipo de Autenticação | Tipo | Valor padrão | Description |
|---|---|---|---|
| AuthorityEndpoint | Corda | Nulo | Quando presente, é utilizado como Autoridade para solicitar um token. |
| Id de Inquilino | Corda | Nulo | Quando presente e AuthorityEndpoint é nulo, usado para criar uma Autoridade para solicitar um token |
| Alcances | Lista de cadeias | Nulo | Listas predefinidas de âmbitos para solicitar tokens. Só é usado quando nenhum âmbito é transmitido do pedido de ligação do agente |
| ID do Cliente | Corda | Nulo | ClientId (AppId) para usar ao criar o token de acesso. |
| CertSubjectName | Corda | Nulo | Quando AuthType é CertificateSubjectName, este é o nome do assunto que é procurado |
| CertStoreName | Corda | "Meu" | Quando AuthType é CertificateSubjectName ou Certificate, indica em que armazenamento de certificados procurar |
| ValidCertificateOnly | bool | Verdadeiro | Requer que o certificado tenha uma cadeia válida. |
| SendX5C | bool | Falso | Permite a rotação automática de certificados com a configuração apropriada. |
Aqui está um exemplo de appsettings para CertificateSubjectName para o Nome do Assunto e Emissor (SNI) e multi-inquilino
"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 CertificateSubjectName para SN+I e SingleTenant
"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"
]
}
}
},
Certificate
| Tipo de Autenticação | Tipo | Valor padrão | Description |
|---|---|---|---|
| AuthorityEndpoint | Corda | Nulo | Quando presente, é utilizado como Autoridade para solicitar um token. |
| Id de Inquilino | Corda | Nulo | Quando presente e AuthorityEndpoint é nulo, usado para criar uma Autoridade para solicitar um token |
| Alcances | Lista de cadeias | Nulo | Listas predefinidas de âmbitos para solicitar tokens. Só é usado quando nenhum âmbito é transmitido do pedido de ligação do agente |
| ID do Cliente | Corda | Nulo | ClientId (AppId) para usar ao criar o token de acesso. |
| CertThumbprint | Corda | Nulo | Thumbprint do certificado a carregar, válida apenas quando AuthType é definido como Certificado |
| CertStoreName | Corda | "Meu" | Quando AuthType é CertificateSubjectName ou Certificate, indica em que armazenamento de certificados procurar |
| ValidCertificateOnly | bool | Verdadeiro | Requer que o certificado tenha uma cadeia válida. |
| SendX5C | bool | Falso | Permite a rotação automática de certificados com a configuração apropriada. |
Aqui está um exemplo de appsettings para CertificateSubjectName usar o thumbprint 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"
]
}
}
},
Fornecedor de configuração predefinido para MSAL
Para facilitar a configuração, fornecemos uma extensão do fornecedor de serviços para adicionar as definições de configuração predefinidas do MSAL ao seu Agente.
Aqui está um exemplo de fornecedor de configuração MSAL predefinido para um anfitrião Asp.net core:
Numa classe Program.cs.
Isso é gerido pela instância registada IConnections . Isso é adicionado por predefinição ao usar AddAgent.
// Register your AgentApplication
builder.AddAgent<MyAgent>();
No entanto, se não estiver a utilizar AddAgent, a instância IConnections deve ser registada.
// Add Connections object to access configured token connections.
builder.Services.AddSingleton<IConnections, ConfigurationConnections>();
Opções adicionais de configuração do MSAL
Há várias opções de configuração partilhadas que controlam as definições gerais para adquirir tokens do Microsoft Entra Identity.
Essas definições são:
| Nome da configuração | Tipo | Valor padrão | Description |
|---|---|---|---|
| MSALRequestTimeout | TimeSpan | 30segundos | Esta definição controla quanto tempo o cliente aguardará por uma resposta do Entra ID após um pedido ter sido feito. |
| MSALRetryCount | Int | 3 | Esta definição controla quantas tentativas de repetição o fornecedor fará para um pedido individual de um token |
| MSALEnabledLogPII | Bool | Falso | Esta definição controla se o registador anexado receberá dados PII da MSAL |
Estas definições são partilhadas com todos os clientes que criam usando o Fornecedor de Autenticação MSAL. Estas definições destinam-se a ser lidas a partir de um leitor IConfiguration, numa secção de configuração denominada "MSALConfiguration".
Observação
MSALConfiguration é uma configuração opcional. Se não definires esta configuração, usam-se as configurações padrão para esses valores.
Aqui está um exemplo da entrada num fincheiro appsettings.json:
{
"MSALConfiguration": {
"MSALEnabledLogPII": "true",
"MSALRequestTimeout": "00:00:40",
"MSALRetryCount": "1"
},
}
Nesse caso, esse bloco de definições instruiria todos os clientes MSAL criados com o forecedor MSAL a ativar o registro de PII, definir o tempo limite para 40 segundos e reduzir a contagem de repetições para 1.
Esta extensão procurará uma seção de configuração chamada "MSALConfiguration" no seu objeto IConfiguration e criará 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 do MSAL usando valores predefinidos.
// Add default agent MsalAuth support
builder.Services.AddDefaultMsalAuth(builder.Configuration);
// Register your AgentApplication
builder.AddAgent<MyAgent>();
Suporte de registo para autenticação
O sistema de autenticação MSAL permite o registo independente dos fluxos de autenticação para integração de telemetria, caso precise de resolver problemas na aquisição de tokens.
Para ativar o registo, adicionaria uma entrada para Microsoft.Agents.Authentication.Msal as definições da aplicação para configurar um ILogger para reportar operações de token para as suas ligações, caso tenha adicionado a opção MSALEnabledLogPII, isso também incluirá PII para a sua ligação.
Aqui está um exemplo do bloco de registo neste caso:
"Logging": {
"LogLevel": {
"Default": "Warning",
"Microsoft.Agents": "Warning",
"Microsoft.Hosting.Lifetime": "Information",
"Microsoft.Agents.Authentication.Msal": "Trace"
}
}
Nesse caso, o registo está ativado para vários módulos e incluem Microsoft.Agents.Authentication.Msal, onde o nível de rastreio é "Rastreio" para MSAL.