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.
Este guia ajuda-o a identificar as diferenças entre o Microsoft Entra SDK para ID de Agente e a biblioteca em-processo Microsoft.Identity.Web para gerir a autenticação nas suas aplicações. A biblioteca Microsoft.Identity.Web integra-se diretamente em aplicações .NET para máximo desempenho. O Microsoft Entra SDK para Agent ID funciona como um contentor separado e suporta qualquer linguagem de programação através de APIs HTTP. A escolha da abordagem correta depende da arquitetura, linguagem e ambiente de implementação da sua aplicação.
Diferenças arquitetônicas
A diferença fundamental está em onde a lógica de autenticação é executada. Microsoft.Identity.Web corre dentro do seu processo da aplicação. O Microsoft Entra SDK para Agent ID funciona como um serviço independente juntamente com a sua aplicação. Essa escolha de arquitetura afeta fatores como fluxo de trabalho de desenvolvimento e complexidade operacional.
| Aspeto | Microsoft.Identity.Web (In-Process) | SDK do Microsoft Entra para ID de Agente (Fora do Processo) |
|---|---|---|
| Limite do processo | Compartilha o mesmo processo, memória e ciclo de vida do seu aplicativo, permitindo chamadas diretas de método e configuração compartilhada | Mantém o isolamento completo, comunicando-se apenas através de APIs HTTP e gerindo os seus próprios recursos de forma independente |
| Acoplamento de idiomas | Acopla fortemente a sua estratégia de autenticação ao .NET, exigindo experiência em C# e runtime .NET em todos os locais onde precisa de autenticação | Desacopla a autenticação da pilha tecnológica da sua aplicação, expondo uma interface HTTP independente da linguagem que funciona igualmente bem com Python, Node.js, Go ou qualquer linguagem compatível com HTTP |
| Modelo de Implementação | Implanta como pacotes NuGet integrados no ficheiro binário da sua aplicação, criando uma unidade de implantação monolítica. | Implanta como uma imagem de contêiner separada, permitindo controle de versão, dimensionamento e atualizações independentes da lógica de autenticação sem afetar o código do aplicativo |
Microsoft. Identity.Web (em processo)
Este excerto de código mostra como Microsoft.Identity.Web se integra diretamente numa aplicação ASP.NET Core.
// Startup configuration
services.AddMicrosoftIdentityWebApiAuthentication(Configuration)
.EnableTokenAcquisitionToCallDownstreamApi()
.AddDownstreamApi("Graph", Configuration.GetSection("DownstreamApis:Graph"))
.AddInMemoryTokenCaches();
// Usage in controller
public class MyController : ControllerBase
{
private readonly IDownstreamApi _downstreamApi;
public MyController(IDownstreamApi downstreamApi)
{
_downstreamApi = downstreamApi;
}
public async Task<ActionResult> GetUserData()
{
var user = await _downstreamApi.GetForUserAsync<User>("Graph",
options => options.RelativePath = "me");
return Ok(user);
}
}
Microsoft Entra SDK para ID de Agente (Fora de Processo)
Este excerto de código demonstra como chamar o SDK Microsoft Entra para o ID do Agente a partir de uma aplicação Node.js usando HTTP. A chamada para o ponto de extremidade do /DownstreamApi SDK lida com a aquisição de token e chamadas de API subsequentes, incluindo a passagem do token de entrada para fluxos OBO no cabeçalho Authorization.
// Configuration
const SidecarUrl = process.env.SIDECAR_URL || "http://localhost:5000";
// Usage in application
async function getUserData(incomingToken: string) {
const response = await fetch(
`${SidecarUrl}/DownstreamApi/Graph?optionsOverride.RelativePath=me`,
{
headers: {
'Authorization': `Bearer ${incomingToken}`
}
}
);
const result = await response.json();
return JSON.parse(result.content);
}
Comparação de funcionalidades
| Característica | Microsoft. Identity.Web | Microsoft Entra SDK para Agent ID |
|---|---|---|
| Suporte de idiomas | Apenas C# / .NET | Qualquer idioma (HTTP) |
| Implementação | Biblioteca em processo | Contentor separado |
| Aquisição de Tokens | Acesso Direto MSAL.NET | Via HTTP API |
| Cache de token | Na memória, distribuído | Computação em memória, distribuído |
| Fluxo OBO | Apoio indígena | Via endpoint HTTP |
| Credenciais do cliente | Apoio indígena | Via endpoint de HTTP |
| Identidade Gerenciada | Apoio direto | Apoio direto |
| Identidades do agente | Via extensões | Parâmetros de consulta |
| Validação de Token | Middleware | /Validar endpoint |
| API a jusante | IDownstreamApi | /DownstreamApi endpoint |
| Microsoft Graph | Integração com SDK de grafos | Via Downstream Api |
| Desempenho | Em processamento (mais rápido possível) | Sobrecarga de HTTP |
| Configuration |
appsettings.json e código |
appsettings.json e variáveis de ambiente |
| Depuração | Depuração padrão do .NET | Depuração de contêiner |
| Hot Reload | .NET Hot Reload | Reinício do contentor |
| Atualizações de pacotes | Pacotes NuGet | Imagens de contêiner |
| Licença | MIT | MIT |
Quando usar cada abordagem
Decidir entre Microsoft.Identity.Web e o Microsoft Entra SDK para Agent ID depende dos requisitos, arquitetura e estratégia de implementação da sua aplicação. Dependendo das suas necessidades, uma abordagem pode ser mais adequada do que outra. As seguintes orientações podem ajudá-lo a tomar uma decisão informada.
| Scenario | Microsoft. Identity.Web (In-Process) | SDK Microsoft Entra para ID de Agente (Fora do Processo) |
|---|---|---|
| Pilha de aplicativos | Aplicações .NET exclusivamente • ASP.NET Core Web APIs • ASP.NET Core Aplicações Web • .NET Serviços para Trabalhadores • Aplicações Blazor • Aplicativos Daemon |
Microsserviços multilingues • Node.js, Python, Go, Java serviços • Arquiteturas poliglotas • Serviços não-.NET Integração de sistemas legados |
| Requisitos de desempenho | O desempenho é fundamental • Cenários de alto rendimento • Operações sensíveis à latência • Cada milissegundo conta |
Pode tolerar sobrecarga HTTP • ~1-5ms latência adicional aceitável • Taxa de transferência não limitada pela autenticação |
| Necessidades de integração | Integração profunda necessária • Configuração personalizada do MSAL.NET • Acesso direto aos recursos da MSAL • Estratégias avançadas de cache de tokens |
Integração padronizada • API HTTP suficiente • Padrões de autenticação consistentes em todos os serviços |
| Experiência de Desenvolvimento | Desenvolvimento rápido • Prototipagem rápida • Recarga a quente para desenvolvimento • Depuração .NET padrão |
Desenvolvimento baseado em contêiner • Reinício do contêiner para alterações • Depuração de contêiner necessária |
| Equipe & Arquitetura | Pilha de idioma único • Especialização da equipa em C#/.NET • Sem requisitos multilingues |
Diversidade tecnológica • Mistura de frameworks e linguagens • Estrutura da equipa poliglota |
| Modelo de Implementação | Implantações monolíticas • Implantação de aplicativo único • Modelos tradicionais de hospedagem |
Implantações em contêineres • Ambientes Kubernetes • Configurações do Docker Compose • Arquiteturas de malha de serviço |
| Operations | Atualizações de autenticação acopladas • Alterações de autenticação exigem reconstrução do aplicativo • Ciclo de vida compartilhado com o aplicativo |
Benefícios operacionais • Escalonamento independente da lógica de autenticação • Separe as atualizações de autenticação do código do aplicativo • Monitorização centralizada da autenticação |
Orientações em matéria de migração
Migrar de Microsoft.Identity.Web para o SDK Microsoft Entra para AgentID
Em certos cenários, pode querer migrar uma aplicação .NET existente que utilize a Microsoft. Identity.Web para aproveitar o Microsoft Entra SDK para o Agent ID para autenticação. As razões para a migração podem incluir a adoção de uma arquitetura multilíngue, a padronização da autenticação entre serviços ou a transição para um modelo de implementação conteinerizado.
É necessária uma consideração e planeamento cuidadosos antes de fazer esta alteração. Esta seção fornece um caminho de migração de alto nível com exemplos de código para ajudá-lo a fazer a transição do seu aplicativo.
Atenção
A Microsoft não recomenda sair da Microsoft. Identity.Web para o Microsoft Entra SDK para AgentID. Se optar por fazer esta alteração, os exemplos seguintes demonstram conceitos semelhantes noutras linguagens e frameworks.
Passo 1: Implementar o contentor do SDK
Primeiro, adiciona o contentor do SDK ao teu pod:
# Before: Single ASP.NET Core container
containers:
- name: app
image: myregistry/myapp:latest
# After: App + Microsoft Entra SDK for AgentID
containers:
- name: app
image: myregistry/myapp:latest
env:
- name: SIDECAR_URL
value: "http://localhost:5000"
- name: sidecar
image: mcr.microsoft.com/entra-sdk/auth-sidecar:1.0.0
env:
- name: AzureAd__TenantId
value: "your-tenant-id"
- name: AzureAd__ClientId
value: "your-client-id"
Etapa 2: Migrar a configuração
De seguida, transfira a sua configuração de appsettings.json para variáveis de ambiente:
Antes (appsettings.json)
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "your-tenant-id",
"ClientId": "your-client-id"
},
"DownstreamApis": {
"Graph": {
"BaseUrl": "https://graph.microsoft.com/v1.0",
"Scopes": "User.Read Mail.Read",
"RelativePath": "/me"
}
}
}
Depois (Kubernetes ConfigMap / Variáveis de Ambiente)
apiVersion: v1
kind: ConfigMap
metadata:
name: sidecar-config
data:
AzureAd__Instance: "https://login.microsoftonline.com/"
AzureAd__TenantId: "your-tenant-id"
AzureAd__ClientId: "your-client-id"
DownstreamApis__Graph__BaseUrl: "https://graph.microsoft.com/v1.0"
DownstreamApis__Graph__Scopes: "User.Read Mail.Read"
DownstreamApis__Graph__RelativePath: "/me"
Passo 3: Atualizar o código da aplicação
Localize todas as instâncias de chamadas no processo para Microsoft.Identity.Web e substitua-as por chamadas HTTP para o SDK Microsoft Entra nos endpoints Agent ID.
Antes (C# com IDownstreamApi):
public class UserController : ControllerBase
{
private readonly IDownstreamApi _downstreamApi;
public UserController(IDownstreamApi downstreamApi)
{
_downstreamApi = downstreamApi;
}
[HttpGet]
public async Task<ActionResult<User>> GetMe()
{
var user = await _downstreamApi.GetForUserAsync<User>(
"Graph",
options => options.RelativePath = "me"
);
return Ok(user);
}
}
Depois (Qualquer idioma com cliente HTTP):
No excerto seguinte, vê chamadas ao SDK Microsoft Entra para o ID do Agente usando o endpoint /DownstreamApi para obter dados do utilizador. Os exemplos são fornecidos em C# e TypeScript.
public class UserController : ControllerBase
{
private readonly HttpClient _httpClient;
private readonly string _SidecarUrl;
public UserController(IHttpClientFactory httpClientFactory, IConfiguration config)
{
_httpClient = httpClientFactory.CreateClient();
_SidecarUrl = config["SIDECAR_URL"];
}
[HttpGet]
public async Task<ActionResult<User>> GetMe()
{
var inboundAuthorizationHeader = Request.Headers["Authorization"].ToString();
// this validates the inbound authorization header and calls the downstream API.
// If you don't call a downstream API, Do validate the inbound authorization header
// (calling the /Validate endpoint)
var request = new HttpRequestMessage(
HttpMethod.Get,
$"{_SidecarUrl}/DownstreamApi/Graph?optionsOverride.RelativePath=me"
);
request.Headers.Add("Authorization", inboundAuthorizationHeader);
var response = await _httpClient.SendAsync(request);
var result = await response.Content.ReadFromJsonAsync<SidecarResponse>();
var user = JsonSerializer.Deserialize<User>(result.Content);
return Ok(user);
}
}
TypeScript
Pode implementar a mesma lógica no TypeScript da seguinte forma:
export async function getMe(incomingToken: string): Promise<User> {
const SidecarUrl = process.env.SIDECAR_URL!;
const response = await fetch(
`${SidecarUrl}/DownstreamApi/Graph?optionsOverride.RelativePath=me`,
{
headers: {
'Authorization': incomingToken
}
}
);
const result = await response.json();
return JSON.parse(result.content) as User;
}
Passo 4: Remover as dependências de Microsoft.Identity.Web
Depois de completar os passos anteriores, organize a sua aplicação removendo os pacotes NuGet para a Microsoft. Identity.Web do seu projeto:
<!-- Remove these from .csproj -->
<PackageReference Include="Microsoft.Identity.Web" Version="..." />
<PackageReference Include="Microsoft.Identity.Web.MicrosoftGraph" Version="..." />
<PackageReference Include="Microsoft.Identity.Web.DownstreamApi" Version="..." />
Se ainda quiseres validar tokens na tua aplicação, não precisas de remover a configuração original de autenticação. Em vez disso, pode delegar a validação inteiramente ao Microsoft Entra SDK para o AgentID.
// Remove from Program.cs or Startup.cs
services.AddMicrosoftIdentityWebApiAuthentication(Configuration)
.EnableTokenAcquisitionToCallDownstreamApi()
.AddDownstreamApi("Graph", Configuration.GetSection("DownstreamApis:Graph"))
.AddInMemoryTokenCaches();
Passo 5: Testar e validar
- Testes unitários: Atualizar os testes para simular chamadas HTTP para o SDK.
- Testes de integração: Testar a comunicação do SDK no ambiente de testes.
- Testes de desempenho: Mede o impacto da sobrecarga HTTP.
- Testes de segurança: Validar a gestão de tokens e as políticas de rede.
Considerações sobre desempenho
Sobrecarga do SDK
O Microsoft Entra SDK para Agent ID introduz sobrecarga de comunicação HTTP:
| Fator de desempenho | Impacto | Estratégia de mitigação |
|---|---|---|
| Latency | Aproximadamente 1-5 ms por pedido de comunicação localhost | Use HTTP/2 para reduzir a sobrecarga de ligação. |
| Throughput | Limitado pelo agrupamento de conexões HTTP | Implemente agrupamento de conexões para reutilizar conexões HTTP. |
| Memória | Sobrecarga de memória de contêiner adicional | Garantir uma alocação adequada de recursos do SDK. |
| Eficiência da Requisição | Várias viagens de ida e volta para operações complexas | Pedidos em lote para combinar múltiplas operações sempre que possível. |
| Desempenho do token | Sobrecarga repetida de aquisição de tokens | Aproveite a cache de tokens do SDK para um desempenho ótimo. |
Desempenho em processo
Usar o Microsoft.Identity.Web tem uma sobrecarga mínima, uma vez que é executado no mesmo processo que a sua aplicação. Fornece chamadas nativas de método com latência de microssegundos e memória partilhada de processos sem limitações HTTP. Quando o desempenho é crítico, a integração em processo é a escolha ideal. No entanto, a flexibilidade e o design independente de linguagem do AgentID no SDK Microsoft Entra podem compensar os compromissos de desempenho em muitos cenários.
A tabela seguinte mostra algumas comparações de desempenho e custo para o uso em processo e o Microsoft Entra SDK para o uso do Agent ID (Fora do Processo):
Considerações de custos
| Fator de Custo | Microsoft. Identity.Web (In-Process) | SDK Microsoft Entra para ID de Agente (Fora do Processo) |
|---|---|---|
| Computar | CPU e memória adicionais mínimas no processo de aplicação | Recursos adicionais de contentores por pod. |
| Network | Sem despesas gerais adicionais | Comunicação mínima com localhost. |
| Armazenamento | Tamanho do pacote NuGet (~10 MB) | Armazenamento de imagens em contentores. |
| Gestão | Sem despesas gerais adicionais | Sobrecarga de orquestração de contentores. |
Exemplo de custo
Para 10 réplicas com configuração SDK de 128 MiB/100m:
| Resource | Em Processo | Microsoft Entra SDK for Agent ID |
|---|---|---|
| Memória | ~0 MB adicionais | 10 × 128 MiB = 1,28 GB |
| Processador | ~0% adicional | 10 × 100m = 1 núcleo |
| Armazenamento | ~10 MB por implantação | Tamanho da imagem do contêiner por nó |
Apoio e manutenção
| Aspeto | Microsoft. Identity.Web | Microsoft Entra SDK for Agent ID |
|---|---|---|
| Updates | Atualizações de pacotes NuGet | Atualizações de imagem de contêiner |
| Alterações Disruptivas | Através do versionamento de pacotes | Através de tags de containers |
| Correções de bugs | Integração em tempo de compilação | Atualizações de contentor de ambiente de execução |
| Patches de segurança | Reconstruir aplicação | Reimplantar contêiner |
| Documentação | Documentação extensa de .NET | Esta documentação |
| Community | Grande comunidade .NET | Comunidade em crescimento |
Abordagem híbrida
Podes combinar ambas as abordagens dentro da mesma arquitetura. Usa a Microsoft. Identity.Web para serviços .NET que exigem desempenho máximo, e utilize o Microsoft Entra SDK para ID de Agente para serviços não .NET ou quando precisa de padrões de autenticação independentes da linguagem. Esta estratégia híbrida ajuda-o a otimizar o desempenho onde é crítico, mantendo consistência e flexibilidade em todo o seu ecossistema de serviços.
Um exemplo de arquitetura é o seguinte:
graph TB
subgraph cluster["Kubernetes Cluster"]
subgraph netpod["<b>.NET API Pod</b>"]
netapi["<b>.NET API</b><br/>(Microsoft.Identity.Web)"]
style netapi fill:#0078d4,stroke:#005a9e,stroke-width:2px,color:#fff
end
subgraph nodepod["<b>Node.js API Pod</b>"]
nodeapi["<b>Node.js API</b>"]
sidecar["<b>Microsoft Entra SDK for AgentID</b>"]
style nodeapi fill:#68a063,stroke:#4a7c45,stroke-width:2px,color:#fff
style sidecar fill:#f2711c,stroke:#d85e10,stroke-width:2px,color:#fff
end
end
style cluster fill:#f0f0f0,stroke:#333,stroke-width:3px
style netpod fill:#e8f4f8,stroke:#0078d4,stroke-width:2px
style nodepod fill:#e8f4e8,stroke:#68a063,stroke-width:2px