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.
Este guia ajuda você a identificar as diferenças entre o SDK do Microsoft Entra para a identificação do agente e a biblioteca em processo Microsoft.Identity.Web para lidar com a autenticação em seus aplicativos. A biblioteca Microsoft.Identity.Web integra-se diretamente a aplicativos .NET para obter o máximo desempenho. O SDK do Microsoft Entra para ID do Agente é executado como um contêiner separado e dá suporte a qualquer linguagem de programação por meio de APIs HTTP. Escolher a abordagem correta depende da arquitetura, linguagem e ambiente de implantação do aplicativo.
Diferenças de arquitetura
A diferença fundamental está no local em que a lógica de autenticação é executada. Microsoft.Identity.Web é executado no processo do seu aplicativo. O SDK do Microsoft Entra para ID do Agente funciona como um serviço independente ao lado do aplicativo. Essa escolha arquitetônica afeta fatores como fluxo de trabalho de desenvolvimento e complexidade operacional.
| Aspecto | Microsoft.Identity.Web (In-Process) | Microsoft Entra SDK para Identificação do Agente (fora-do-processo) |
|---|---|---|
| Limite do processo | Compartilha o mesmo processo, memória e ciclo de vida que seu aplicativo, habilitando chamadas de método direto e configuração compartilhada | Mantém o isolamento completo, comunicando-se somente por meio de APIs HTTP e gerenciando seus próprios recursos de forma independente |
| Acoplamento de idioma | Associa firmemente sua estratégia de autenticação para .NET, exigindo experiência em C# e .NET runtime em todos os lugares em que você precisa de autenticação | Desassocia a autenticação do stack de tecnologia do seu aplicativo, expondo uma interface HTTP compatível com qualquer linguagem, funcionando igualmente bem com Python, Node.js, Go ou qualquer linguagem compatível com HTTP. |
| Modelo de Implantação | Implanta como pacotes NuGet incorporados ao binário do seu aplicativo, criando uma unidade de distribuição monolítica | Implanta como uma imagem de contêiner separada, habilitando o controle de versão independente, o dimensionamento e as atualizações da lógica de autenticação sem afetar o código do aplicativo |
Microsoft. Identity.Web (em processo)
Este snippet de código mostra como o Microsoft.Identity.Web integra-se diretamente a um aplicativo 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 do Agente (fora do processo)
Este trecho de código demonstra como chamar o SDK do Microsoft Entra para ID do agente de um aplicativo Node.js usando HTTP. A chamada para o ponto de extremidade do SDK manipula a aquisição de token /DownstreamApi e realiza chamadas à API subsequente, incluindo a transmissão 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 Identificação do Agente |
|---|---|---|
| Suporte ao idioma | Somente C#/.NET | Qualquer idioma (HTTP) |
| Implantação | Biblioteca em processo | Contêiner separado |
| Aquisição de token | Uso direto de MSAL.NET | Por meio da API HTTP |
| Cache de token | Armazenamento em memória, distribuído | Em memória, distribuído |
| OBO Flow | Suporte nativo | Por meio do ponto de extremidade HTTP |
| Credenciais do cliente | Suporte nativo | Por meio do ponto de extremidade HTTP |
| Identidade Gerenciada | Suporte direto | Suporte direto |
| Identidades do agente | Por meio de extensões | Parâmetros de consulta |
| Validação de token | Middleware | /Validar ponto de extremidade |
| Downstream API | IDownstreamApi | Ponto de extremidade /DownstreamApi |
| Microsoft Graph | Integração do SDK do Graph | Via DownstreamApi |
| Desempenho | Em andamento (mais rápido) | Sobrecarga HTTP |
| Configuration |
appsettings.json e código |
appsettings.json e variáveis de ambiente |
| Depuração de | Depuração padrão do .NET | Depuração de contêiner |
| Recarga Dinâmica | .NET Recarga Dinâmica | Reinicialização do contêiner |
| Atualizações de pacote | Pacotes NuGet | Imagens de contêiner |
| Licença | MIT | MIT |
Quando usar cada abordagem
Decidir entre Microsoft.Identity.Web e o SDK do Microsoft Entra para Agent ID depende dos requisitos, da arquitetura e da estratégia de implantação do seu aplicativo. Dependendo de suas necessidades, uma abordagem pode ser mais adequada do que a outra. As diretrizes a seguir podem ajudá-lo a tomar uma decisão informada.
| Scenario | Microsoft.Identity.Web (In-Process) | Microsoft Entra SDK para ID do Agente (Out-of-Process) |
|---|---|---|
| Pilha de Aplicativos | aplicativos .NET exclusivamente • ASP.NET Core Web APIs • ASP.NET Core Aplicativos Web • Serviços de Trabalho do .NET • Aplicativos Blazor • Aplicativos de apoio (daemon) |
Microsserviços de vários idiomas • serviços Node.js, Python, Go, Java • Arquiteturas poliglotas • Serviços não .NET • Integração de sistemas legados |
| Requisitos de desempenho | O desempenho é crítico • Cenários de alta taxa de transferência • 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 por autenticação |
| Necessidades de integração | Integração profunda necessária • Configuração de MSAL.NET personalizada • Acesso direto aos recursos da MSAL • Estratégias avançadas de cache de token |
Integração padronizada • API HTTP suficiente • Padrões de autenticação consistentes entre serviços |
| Experiência de desenvolvimento | Desenvolvimento rápido • Criação rápida de protótipos • Recarregamento frequente para desenvolvimento • Depuração padrão para .NET |
Desenvolvimento baseado em contêiner • Reinicialização do contêiner para alterações • É necessária a depuração de contêiner |
| Equipe e Arquitetura | Stack de linguagem única • Experiência em equipe em C#/.NET • Sem requisitos de vários idiomas |
Diversidade tecnológica • Combinação de estruturas e idiomas • Estrutura de equipe poliglota |
| Modelo de Implantação | Implantações monolíticas • Implantação de aplicativo único • Modelos de hospedagem tradicionais |
Implantações em contêineres • Ambientes do Kubernetes • Configurações do Docker Compose • Arquiteturas de malha de serviço |
| Operations | Atualizações de autenticação acopladas • As alterações de autenticação exigem a recompilação do aplicativo • Ciclo de vida compartilhado com o aplicativo |
Benefícios operacionais • Dimensionamento independente da lógica de autenticação • Separar atualizações de autenticação do código do aplicativo • Monitoramento centralizado de autenticação |
Diretrizes de migração
Migrando de Microsoft. Identity.Web para Microsoft Entra SDK para AgentID
Em determinados cenários, talvez você queira migrar um aplicativo .NET existente que usa Microsoft.Identity.Web para utilizar o SDK do Microsoft Entra para autenticação por meio do Agent ID. Os motivos para a migração podem incluir a adoção de uma arquitetura de vários idiomas, a padronização da autenticação entre serviços ou a mudança para um modelo de implantação em contêineres.
Consideração e planejamento cuidadosos são necessários antes de fazer essa 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 aplicativo.
Cuidado
Microsoft não recomenda mudar de Microsoft.Identity.Web para o Microsoft Entra SDK para AgentID. Se você optar por fazer essa alteração, os exemplos a seguir demonstram conceitos semelhantes em outros idiomas e estruturas.
Etapa 1: Implantar contêiner do SDK
Primeiro, adicione o contêiner do SDK ao 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
Em seguida, transfira 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"
}
}
}
After (Kubernetes ConfigMap/Environment Variables)
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"
Etapa 3: Atualizar o código do aplicativo
Identifique todas as instâncias de chamadas em processo para Microsoft.Identity.Web e substitua-as por chamadas HTTP para o SDK Microsoft Entra nos endpoints de ID do agente:
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 trecho de código a seguir, são apresentadas chamadas para o SDK do Microsoft Entra para a Identificação do Agente usando o ponto de extremidade /DownstreamApi para obter dados do usuário. 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
Você pode implementar a mesma lógica no TypeScript da seguinte maneira:
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;
}
Etapa 4: Remover dependências de Microsoft.Identity.Web
Depois de concluir as etapas anteriores, arrume seu aplicativo removendo os pacotes NuGet para 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 você ainda quiser validar tokens em seu aplicativo, não precisará remover a configuração de autenticação original. Em vez disso, você pode delegar a validação inteiramente ao SDK do Microsoft Entra para AgentID.
// Remove from Program.cs or Startup.cs
services.AddMicrosoftIdentityWebApiAuthentication(Configuration)
.EnableTokenAcquisitionToCallDownstreamApi()
.AddDownstreamApi("Graph", Configuration.GetSection("DownstreamApis:Graph"))
.AddInMemoryTokenCaches();
Etapa 5: Testar e validar
- Testes de unidade: atualize os testes para simular chamadas HTTP para o SDK.
- Testes de integração: teste a comunicação do SDK em ambiente de teste.
- Testes de desempenho: medir o impacto de sobrecarga HTTP.
- Testes de segurança: validar o tratamento de tokens e as políticas de rede.
Considerações sobre desempenho
Sobrecarga do SDK
O SDK do Microsoft Entra para ID do agente introduz sobrecarga de comunicação HTTP.
| Fator de desempenho | Impacto | Estratégia de mitigação |
|---|---|---|
| Latency | Aproximadamente 1 a 5 ms por solicitação de comunicação localhost | Use HTTP/2 para reduzir a sobrecarga de conexão. |
| Throughput | Limitado pelo agrupamento de conexões HTTP | Implemente o pool de conexões para reutilizar conexões HTTP. |
| Memory | Sobrecarga de memória de contêiner adicional | Verifique a alocação adequada de recursos do SDK. |
| Eficiência da solicitação | Várias viagens de ida e volta para operações complexas | Solicitações em lote para combinar várias operações quando possível. |
| Desempenho do token | Sobrecarga de aquisição de token repetida | Aproveite o cache de token do SDK para obter um desempenho ideal. |
Desempenho em Processo
Usando Microsoft. Identity.Web tem sobrecarga mínima, pois é executada no mesmo processo que seu aplicativo. Ele fornece chamadas de método nativo com latência de microssegundos e memória de processo compartilhado sem limitações HTTP. Quando o desempenho é crítico, a integração em processo é a opção ideal. No entanto, o SDK Microsoft Entra para a flexibilidade do AgentID e seu design independente de linguagem podem compensar os compromissos de desempenho em muitos cenários.
A tabela a seguir mostra algumas comparações de desempenho e custo para uso em processo e uso Microsoft Entra SDK para ID do agente (fora do processo):
Considerações de custo
| Fator de Custo | Microsoft.Identity.Web (In-Process) | Microsoft Entra SDK para ID do Agente (Out-of-Process) |
|---|---|---|
| Calcule | Mínimo adicional de CPU e memória no processo do aplicativo | Recursos de contêiner adicionais por pod. |
| Network | Nenhuma sobrecarga adicional | Comunicação de localhost mínima. |
| Armazenamento | Tamanho do pacote NuGet (aproximadamente 10 MB) | Armazenamento de imagens de contêiner. |
| Gestão | Nenhuma sobrecarga adicional | Sobrecarga de orquestração de contêiner. |
Exemplo de custo
Para 10 réplicas com configuração de SDK de 128 MiB/100m:
| Resource | Em Processo | Microsoft Entra SDK para ID do Agente |
|---|---|---|
| Memory | ~0 MB adicionais | 10 × 128 MiB = 1,28 GB |
| CPU | ~0% adicional | 10 × 100m = 1 núcleo |
| Armazenamento | ~10 MB por implantação | Tamanho da imagem do contêiner por nó |
Suporte e manutenção
| Aspecto | Microsoft. Identity.Web | Microsoft Entra SDK para Identificação do Agente |
|---|---|---|
| Updates | Atualizações do pacote NuGet | Atualizações de imagem de contêiner |
| Alterações de ruptura | Por meio da versionamento do pacote | Por meio de tags de contêiner |
| Correções de bug | Integração em tempo de compilação | Atualizações de contêiner em tempo de execução |
| Patches de segurança | Recompilar aplicativo | Reimplantar contêiner |
| Documentação | Documentos de .NET extensos | Esta documentação |
| Community | Comunidade grande de .NET | Comunidade em crescimento |
Abordagem híbrida
Você pode combinar ambas as abordagens dentro da mesma arquitetura. Use Microsoft. Identity.Web para serviços de .NET que exigem o desempenho máximo e usam o SDK Microsoft Entra para ID do agente para serviços não .NET ou quando você precisa de padrões de autenticação independente de idioma. Essa estratégia híbrida ajuda você a otimizar o desempenho em que ele é crítico, mantendo a consistência e a flexibilidade em todo o ecossistema de serviços.
Uma arquitetura de exemplo é a 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