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 documento fornece referência completa para os endpoints HTTP expostos pelo Microsoft Entra SDK para o AgentID.
Especificação API
Utilize-o para:
- Gerar código de cliente
- Validar pedidos
- Descubra os endpoints disponíveis
Visão geral do endpoint
| Ponto final | Método(s) | Propósito | Autenticação necessária |
|---|---|---|---|
/Validate |
Obtém | Validar um token ao portador de entrada e declarações de retorno | Yes |
/AuthorizationHeader/{serviceName} |
Obtém | Validar token de entrada (se presente) e adquirir um cabeçalho de autorização para uma API downstream | Yes |
/AuthorizationHeaderUnauthenticated/{serviceName} |
Obtém | Adquira um cabeçalho de autorização (identidade do aplicativo ou agente) sem token de usuário de entrada | Yes |
/DownstreamApi/{serviceName} |
OBTER, PUBLICAR, COLOCAR, CORRIGIR, EXCLUIR | Valide o token de entrada (se presente) e chame a API downstream com aquisição automática de token | Yes |
/DownstreamApiUnauthenticated/{serviceName} |
OBTER, PUBLICAR, COLOCAR, CORRIGIR, EXCLUIR | Chamar API downstream (somente identidade de aplicativo ou agente) | Yes |
/healthz |
Obtém | Sonda de saúde (vivacidade/prontidão) | Não |
/openapi/v1.json |
Obtém | Documento OpenAPI 3.0 | Não (apenas Dev) |
Authentication
Todos os pontos finais de aquisição e validação de token exigem um token de portador no cabeçalho, a Authorization menos que explicitamente marcado como não autenticado:
GET /AuthorizationHeader/Graph
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGc...
Os tokens são validados contra as definições configuradas do Microsoft Entra ID (inquilino, público, emissor, escopos se ativados).
/Validate
Valida o token de portador de entrada e retorna suas declarações.
Solicitação
GET /Validate HTTP/1.1
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGc...
Resposta bem-sucedida (200)
{
"protocol": "Bearer",
"token": "eyJ0eXAiOiJKV1QiLCJhbGc...",
"claims": {
"aud": "api://your-api-id",
"iss": "https://sts.windows.net/tenant-id/",
"iat": 1234567890,
"nbf": 1234567890,
"exp": 1234571490,
"acr": "1",
"appid": "client-id",
"appidacr": "1",
"idp": "https://sts.windows.net/tenant-id/",
"oid": "user-object-id",
"tid": "tenant-id",
"scp": "access_as_user",
"sub": "subject",
"ver": "1.0"
}
}
Exemplos de erros
// 400 Bad Request - No token
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "Bad Request",
"status": 400,
"detail": "No token found"
}
// 401 Unauthorized - Invalid token
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "Unauthorized",
"status": 401
}
/AuthorizationHeader/{serviceName}
Adquire um token de acesso para a API downstream configurada e o retorna como um valor de cabeçalho de autorização. Se um token de portador de usuário é fornecido de entrada, OBO (delegado) é usado; caso contrário, os padrões de contexto do aplicativo serão aplicados (se habilitados).
Parâmetro de caminho
-
serviceName– Nome da API downstream na configuração
Parâmetros de consulta
Sobreposições padrão
| Parâmetro | Tipo | Description | Example |
|---|---|---|---|
optionsOverride.Scopes |
string[] | Substituir escopos configurados (repetível) | ?optionsOverride.Scopes=User.Read&optionsOverride.Scopes=Mail.Read |
optionsOverride.RequestAppToken |
Booleano | Forçar token somente de aplicativo (ignorar OBO) | ?optionsOverride.RequestAppToken=true |
optionsOverride.AcquireTokenOptions.Tenant |
cadeia (de caracteres) | Substituir ID do locatário | ?optionsOverride.AcquireTokenOptions.Tenant=tenant-guid |
optionsOverride.AcquireTokenOptions.PopPublicKey |
cadeia (de caracteres) | Ativar PoP/SHR (chave pública base64) | ?optionsOverride.AcquireTokenOptions.PopPublicKey=base64key |
optionsOverride.AcquireTokenOptions.PopClaims |
cadeia (de caracteres) | Reivindicações PoP adicionais (JSON) | ?optionsOverride.AcquireTokenOptions.PopClaims={"nonce":"abc"} |
Identidade do agente
| Parâmetro | Tipo | Description | Example |
|---|---|---|---|
AgentIdentity |
cadeia (de caracteres) | ID do aplicativo do agente (cliente) | ?AgentIdentity=11111111-2222-3333-4444-555555555555 |
AgentUsername |
cadeia (de caracteres) | Nome principal do usuário (agente delegado) | ?AgentIdentity=<id>&AgentUsername=user@contoso.com |
AgentUserId |
cadeia (de caracteres) | ID do objeto do usuário (agente delegado) | ?AgentIdentity=<id>&AgentUserId=aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee |
Regras:
-
AgentUsernameouAgentUserIdexigirAgentIdentity(agente do usuário). -
AgentUsernameeAgentUserIdexcluem-se mutuamente. -
AgentIdentitysozinho = agente autônomo. -
AgentIdentity+ token de entrada do usuário = agente delegado.
Examples
Pedido básico:
GET /AuthorizationHeader/Graph HTTP/1.1
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGc...
GET /AuthorizationHeader/Graph?optionsOverride.RequestAppToken=true HTTP/1.1
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGc...
GET /AuthorizationHeader/Graph?AgentIdentity=agent-id HTTP/1.1
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGc...
Resposta
{
"authorizationHeader": "Bearer eyJ0eXAiOiJKV1QiLCJhbGc..."
}
Resposta PoP/SHR:
{
"authorizationHeader": "PoP eyJ0eXAiOiJhdCtqd3QiLCJhbGc..."
}
/AuthorizationHeaderUnauthenticated/{serviceName}
O mesmo comportamento e parâmetros que /AuthorizationHeader/{serviceName} mas nenhum token de usuário de entrada é esperado. Usado para aquisição de identidade somente de aplicativo ou autônoma/agente sem um contexto de usuário. Evita a sobrecarga de validar um token de usuário.
Solicitação
GET /AuthorizationHeaderUnauthenticated/Graph HTTP/1.1
Resposta
{
"authorizationHeader": "Bearer eyJ0eXAiOiJKV1QiLCJhbGc..."
}
/DownstreamApi/{serviceName}
Adquire um token de acesso e executa uma solicitação HTTP para a API downstream. Retorna o código de status, cabeçalhos e corpo da resposta downstream. Suporta padrões de identidade de OBO, somente aplicativo ou agente.
Parâmetro de caminho
-
serviceName– Nome da API downstream configurado.
Parâmetros adicionais de consulta (além dos /AuthorizationHeader parâmetros)
| Parâmetro | Tipo | Description | Example |
|---|---|---|---|
optionsOverride.HttpMethod |
cadeia (de caracteres) | Substituir método HTTP | ?optionsOverride.HttpMethod=POST |
optionsOverride.RelativePath |
cadeia (de caracteres) | Acrescentar caminho relativo ao BaseUrl configurado | ?optionsOverride.RelativePath=me/messages |
optionsOverride.CustomHeader.<Name> |
cadeia (de caracteres) | Adicionar cabeçalho(s) personalizado(s) | ?optionsOverride.CustomHeader.X-Custom=value |
Encaminhamento corporal do pedido
O corpo é passado inalterado:
POST /DownstreamApi/Graph?optionsOverride.RelativePath=me/messages HTTP/1.1
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGc...
Content-Type: application/json
{
"subject": "Hello",
"body": { "contentType": "Text", "content": "Hello world" }
}
Resposta
{
"statusCode": 200,
"headers": {
"content-type": "application/json"
},
"content": "{\"@odata.context\":\"...\",\"displayName\":\"...\"}"
}
Espelho de erros /AuthorizationHeader mais códigos de status de erro de API downstream.
/DownstreamApiUnauthenticated/{serviceName}
O mesmo que /DownstreamApi/{serviceName} , mas nenhum token de usuário de entrada é validado. Use para operações somente de aplicativo ou agente autônomo.
/saúdez
Ponto de avaliação da sonda de saúde básica.
Resposta
Saudável (200):
HTTP/1.1 200 OK
Insalubridade (503):
HTTP/1.1 503 Service Unavailable
/openapi/v1.json
Retorna a especificação OpenAPI 3.0 (somente ambiente de desenvolvimento). Use para:
- Gerar código de cliente
- Validar pedidos
- Descubra os endpoints
Padrões de erro comuns
Pedido negativo (400)
Nome do serviço em falta:
// 400 Bad Request - Missing service name
{ "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1", "title": "Bad Request", "status": 400, "detail": "Service name is required" }
// 400 Bad Request - Invalid agent combination
{ "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1", "title": "Bad Request", "status": 400, "detail": "AgentUsername and AgentUserId are mutually exclusive" }
// 401 Unauthorized - Invalid token
{ "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1", "title": "Unauthorized", "status": 401 }
// 403 Forbidden - Missing scope
{ "type": "https://tools.ietf.org/html/rfc7231#section-6.5.3", "title": "Forbidden", "status": 403, "detail": "The scope 'access_as_user' is required" }
// 404 Not Found - Service not configured
{ "type": "https://tools.ietf.org/html/rfc7231#section-6.5.4", "title": "Not Found", "status": 404, "detail": "Downstream API 'UnknownService' not configured" }
// 500 Internal Server Error - Token acquisition failure
{ "type": "https://tools.ietf.org/html/rfc7231#section-6.6.1", "title": "Internal Server Error", "status": 500, "detail": "Failed to acquire token for downstream API" }
Exemplo de erro MSAL
{ "type": "https://tools.ietf.org/html/rfc7231#section-6.6.1", "title": "Internal Server Error", "status": 500, "detail": "MSAL.NetCore.invalid_grant: AADSTS50076: Due to a configuration change ...", "extensions": { "errorCode": "invalid_grant", "correlationId": "..." } }
Referência completa de sobreposição
optionsOverride.Scopes=<scope> # Repeatable
optionsOverride.RequestAppToken=<true|false>
optionsOverride.BaseUrl=<url>
optionsOverride.RelativePath=<path>
optionsOverride.HttpMethod=<method>
optionsOverride.AcquireTokenOptions.Tenant=<tenant-id>
optionsOverride.AcquireTokenOptions.AuthenticationScheme=<scheme>
optionsOverride.AcquireTokenOptions.CorrelationId=<guid>
optionsOverride.AcquireTokenOptions.PopPublicKey=<base64-key>
optionsOverride.AcquireTokenOptions.PopClaims=<json>
optionsOverride.CustomHeader.<Name>=<value>
AgentIdentity=<agent-client-id>
AgentUsername=<user-upn> # Requires AgentIdentity
AgentUserId=<user-object-id> # Requires AgentIdentity
Exemplos de substituição
Substituir escopos:
GET /AuthorizationHeader/Graph?optionsOverride.Scopes=User.Read&optionsOverride.Scopes=Mail.Read HTTP/1.1
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGc...
Limitação de Velocidade
O próprio Microsoft Entra SDK para o Agent ID não impõe limites de taxa. Os limites efetivos provêm de:
- Microsoft Entra ID token throttling (não deveria acontecer, pois o SDK armazena o token em cache)
- Limites da API a jusante
- Eficiência do cache de tokens (reduz o volume de aquisição)
Melhores práticas
- Prefira a configuração às substituições ad-hoc.
- Mantenha os nomes de serviço estáticos e declarativos.
- Implementar políticas de repetição para falhas transitórias (HTTP 500/503).
- Valide os parâmetros do agente antes de chamar.
- Registre IDs de correlação para rastreamento entre serviços.
- Monitore a latência de aquisição de tokens e as taxas de erro.
- Use sondas de integridade em plataformas de orquestração.