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 AgentID e a biblioteca Microsoft.Identity.Web em processo 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 de desempenho, enquanto o SDK do Microsoft Entra para AgentID é executado como um contêiner separado e dá suporte a qualquer linguagem de programação por meio de APIs HTTP e 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 em seu processo de aplicativo, enquanto o SDK do Microsoft Entra para AgentID opera como um serviço independente junto com seu aplicativo. Essa escolha arquitetônica afeta fatores como fluxo de trabalho de desenvolvimento e complexidade operacional.
| Aspecto | Microsoft.Identity.Web (In-Process) | SDK do Microsoft Entra para AgentID (fora de 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 ao .NET, exigindo experiência em C# e runtime do .NET em todos os lugares em que você precisa de autenticação | Desacopla a autenticação da pilha de tecnologia do aplicativo, expondo uma interface HTTP independente de linguagem que funciona igualmente bem com Python, Node.js, Go ou qualquer linguagem que suporte 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 (In-Process)
Este snippet de código mostra como o Microsoft.Identity.Web se integra 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);
}
}
SDK do Microsoft Entra para AgentID (fora de processo)
Este snippet de código demonstra como chamar o SDK do Microsoft Entra para AgentID 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 | SDK do Microsoft Entra para AgentID |
|---|---|---|
| Suporte ao idioma | Somente C# / .NET | Qualquer idioma (HTTP) |
| Implantação | Biblioteca em processo | Contêiner separado |
| Aquisição de token | ✅ Direct MSAL.NET | ✅ Por meio da API HTTP |
| Cache de token | ✅ Em memória, ✅ distribuído | ✅ Na 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 processo (mais rápido de todos) | 🔄 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 Rápida | ✅ Recarga Rápida do .NET | ❌ 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 o Microsoft.Identity.Web e o SDK do Microsoft Entra para AgentID depende dos requisitos, da arquitetura e da estratégia de implantação do aplicativo. Dependendo de suas necessidades, uma abordagem pode ser mais adequada do que a outra e as diretrizes a seguir podem ajudá-lo a tomar uma decisão informada.
| Scenario | Microsoft.Identity.Web (In-Process) | SDK do Microsoft Entra para AgentID (fora de processo) |
|---|---|---|
| Pilha de Aplicativos | Aplicativos .NET exclusivamente • ASP.NET Core Web APIs • ASP.NET Principais 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 e Java • Arquiteturas poliglotas • serviços de Non-.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 do .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 do Microsoft.Identity.Web para o SDK do Microsoft Entra para AgentID
Em determinados cenários, talvez você queira migrar um aplicativo .NET existente usando Microsoft.Identity.Web para aproveitar o SDK do Microsoft Entra para AgentID para autenticação. 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 você fazer isso. 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
A Microsoft não recomenda que você mude do Microsoft.Identity.Web para o SDK do Microsoft Entra para AgentID, mas se você optar por fazer isso, as demonstrações a seguir são demonstrações de conceitos semelhantes em outras linguagens e estruturas.
Etapa 1: Implantar contêiner do SDK
Primeiro, você precisará adicionar 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, você precisará transferir 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 código do aplicativo
Localize todas as instâncias de chamadas internas para Microsoft.Identity.Web e substitua-as por chamadas HTTP para o SDK do Microsoft Entra nos endpoints do AgentID.
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 snippet a seguir, podemos ver chamadas para o Microsoft Entra SDK utilizando o endpoint /DownstreamApi do AgentID 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
A mesma lógica pode ser implementada 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 microsoft.Identity.Web
Depois que as etapas anteriores tiverem sido concluídas, você poderá arrumar seu aplicativo removendo os pacotes NuGet usados pelo 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 totalmente a configuração de autenticação original, embora possa 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: atualizar 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: 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
A sobrecarga do SDK
O SDK do Microsoft Entra para AgentID apresenta a sobrecarga de comunicação HTTP:
| Fator de desempenho | Impacto | Estratégia de mitigação |
|---|---|---|
| Latency | ~1-5ms por solicitação de comunicação localhost | Usar HTTP/2 para reduzir a sobrecarga de conexão |
| Throughput | Limitado pelo agrupamento de conexões HTTP | Implementar o pool de conexões para reutilizar conexões HTTP |
| Memory | Sobrecarga de memória de contêiner adicional | Garantir 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 | Aproveitar o cache de token do SDK para obter um desempenho ideal |
Desempenho do In-Process
O uso do Microsoft.Identity.Web tem sobrecarga mínima, pois é executado no mesmo processo que seu aplicativo, fornecendo 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, mas a flexibilidade e o design independente de linguagem do SDK do Microsoft Entra para o AgentID podem superar os compromissos de desempenho em muitos cenários.
Veja a seguir algumas comparações de desempenho e custo para uso em processo e uso do SDK do Microsoft Entra para AgentID (fora do processo):
Considerações de custo
| Fator de Custo | Microsoft.Identity.Web (In-Process) | SDK do Microsoft Entra para AgentID (fora de processo) |
|---|---|---|
| Calcule | CPU/memória adicionais mínimas no processo do aplicativo | Recursos de contêiner adicionais por pod |
| Network | Nenhuma sobrecarga adicional | Mínimo (comunicações localhost) |
| Armazenamento | Tamanho do pacote NuGet (~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 128Mi/100m:
| Resource | Em Processo | SDK do Microsoft Entra para AgentID |
|---|---|---|
| Memory | ~0MB adicional | 10 × 128Mi = 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 | SDK do Microsoft Entra para AgentID |
|---|---|---|
| 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 | Documentação extensa do .NET | Esta documentação |
| Community | Comunidade grande do .NET | Comunidade em crescimento |
Abordagem híbrida
Você pode combinar ambas as abordagens dentro da mesma arquitetura: usar Microsoft.Identity.Web para serviços .NET que exigem desempenho máximo, aproveitando o SDK do Microsoft Entra para AgentID para serviços non-.NET ou quando precisar de padrões de autenticação independente de idioma. Essa estratégia híbrida permite otimizar o desempenho quando crítico, mantendo a consistência e a flexibilidade em todo o ecossistema de serviços.
Uma arquitetura de exemplo seria 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
Próximas etapas
- Guia de instalação – Implantar o SDK do Microsoft Entra para AgentID
- Referência de configuração – Configurar o SDK
- Cenários – Exemplos práticos
- Documentação do Microsoft.Identity.Web – Saiba mais sobre a biblioteca em processo