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 documento fornece uma referência completa para os pontos de extremidade HTTP expostos pelo SDK do Microsoft Entra para AgentID.
Especificação da API
Especificação do OpenAPI: disponível em /openapi/v1.json (ambiente de desenvolvimento) e no repositório: https://github.com/AzureAD/microsoft-identity-web/blob/master/src/Microsoft.Identity.Web.Sidecar/OpenAPI/Microsoft.Identity.Web.AgentID.json
Use-o para:
- Gerar código do cliente
- Validar solicitações
- Descobrir pontos de extremidade disponíveis
Visão geral do ponto de extremidade
| Ponto final | Método(s) | Propósito | Autenticação necessária |
|---|---|---|---|
/Validate |
GET | Validar um token de portador de entrada e retornar declarações | Yes |
/AuthorizationHeader/{serviceName} |
GET | Validar o token de entrada (se presente) e adquirir um cabeçalho de autorização para uma API downstream | Yes |
/AuthorizationHeaderUnauthenticated/{serviceName} |
GET | Adquirir um cabeçalho de autorização (identidade de aplicativo ou agente) sem token de usuário de entrada | Yes |
/DownstreamApi/{serviceName} |
GET, POST, PUT, PATCH, DELETE | Validar token de entrada (se presente) e chamar a API downstream com aquisição automática de token | Yes |
/DownstreamApiUnauthenticated/{serviceName} |
GET, POST, PUT, PATCH, DELETE | Chamar API downstream (somente identidade de aplicativo ou agente) | Yes |
/healthz |
GET | Investigação de integridade (vida/preparação) | Não |
/openapi/v1.json |
GET | Documento do OpenAPI 3.0 | Não (somente Desenvolvimento) |
Authentication
Todos os pontos de extremidade de aquisição e validação de token exigem um token de portador no cabeçalho, a Authorization menos que seja marcado explicitamente como não autenticado:
GET /AuthorizationHeader/Graph
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGc...
Os tokens são validados em relação às configurações de ID do Microsoft Entra definidas (locatário, audiência, emissor, escopos, se habilitados).
/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 erro
// 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 retorna-o como um valor de cabeçalho de autorização. Se um token de portador de usuário for fornecido na entrada, o OBO (delegado) será usado; caso contrário, os padrões de contexto do aplicativo se aplicam (se habilitados).
Parâmetro path
-
serviceName– Nome da API downstream na configuração
Parâmetros de consulta
Substituições padrão
| Parâmetro | Tipo | Description | Example |
|---|---|---|---|
optionsOverride.Scopes |
cadeia de caracteres[] | Substituir escopos configurados (repetível) | ?optionsOverride.Scopes=User.Read&optionsOverride.Scopes=Mail.Read |
optionsOverride.RequestAppToken |
boolean | Forçar token somente de aplicativo (ignorar OBO) | ?optionsOverride.RequestAppToken=true |
optionsOverride.AcquireTokenOptions.Tenant |
cadeia | Substituir a ID do locatário | ?optionsOverride.AcquireTokenOptions.Tenant=tenant-guid |
optionsOverride.AcquireTokenOptions.PopPublicKey |
cadeia | Habilitar PoP/SHR (chave pública base64) | ?optionsOverride.AcquireTokenOptions.PopPublicKey=base64key |
optionsOverride.AcquireTokenOptions.PopClaims |
cadeia | Declarações de PoP adicionais (JSON) | ?optionsOverride.AcquireTokenOptions.PopClaims={"nonce":"abc"} |
Identidade do agente
| Parâmetro | Tipo | Description | Example |
|---|---|---|---|
AgentIdentity |
cadeia | ID do aplicativo agent (cliente) | ?AgentIdentity=11111111-2222-3333-4444-555555555555 |
AgentUsername |
cadeia | Nome da entidade de usuário (agente delegado) | ?AgentIdentity=<id>&AgentUsername=user@contoso.com |
AgentUserId |
cadeia | ID do objeto de usuário (agente delegado) | ?AgentIdentity=<id>&AgentUserId=aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee |
Réguas:
-
AgentUsernameouAgentUserIdrequerAgentIdentity(agente do usuário). -
AgentUsernameeAgentUserIdsão mutuamente exclusivos. -
AgentIdentityalone = agente autônomo. -
AgentIdentity+ token de entrada do usuário = agente delegado.
Exemplos
Solicitação básica:
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 de PoP/SHR:
{
"authorizationHeader": "PoP eyJ0eXAiOiJhdCtqd3QiLCJhbGc..."
}
/AuthorizationHeaderUnauthenticated/{serviceName}
O mesmo comportamento e parâmetros, /AuthorizationHeader/{serviceName} mas nenhum token de usuário de entrada é esperado. Usado para aquisição de identidade somente de aplicativo ou autônomo/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 código de status, cabeçalhos e corpo da resposta downstream. Dá suporte a padrões de identidade do usuário OBO, somente aplicativo ou agente.
Parâmetro path
-
serviceName– Nome da API downstream configurado.
Parâmetros de consulta adicionais (além /AuthorizationHeader dos parâmetros)
| Parâmetro | Tipo | Description | Example |
|---|---|---|---|
optionsOverride.HttpMethod |
cadeia | Substituir método HTTP | ?optionsOverride.HttpMethod=POST |
optionsOverride.RelativePath |
cadeia | Anexar o caminho relativo ao BaseUrl configurado | ?optionsOverride.RelativePath=me/messages |
optionsOverride.CustomHeader.<Name> |
cadeia | Adicionar cabeçalhos personalizados | ?optionsOverride.CustomHeader.X-Custom=value |
Encaminhamento do corpo da solicitação
O corpo é passado por 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\":\"...\"}"
}
Erros espelham /AuthorizationHeader mais códigos de status de erro da API downstream.
/DownstreamApiUnauthenticated/{serviceName}
O mesmo que /DownstreamApi/{serviceName} mas nenhum token de usuário de entrada é validado. Use para operações de agente autônomo ou somente aplicativo.
/healthz
Ponto de extremidade básico da investigação de integridade.
Resposta
Íntegro (200):
HTTP/1.1 200 OK
Não íntegro (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 do cliente
- Validar solicitações
- Descobrir pontos de extremidade
Padrões de erro comuns
Solicitação incorreta (400)
Nome do serviço ausente:
// 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 de substituição completa
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 taxa
O SDK do Microsoft Entra para AgentID em si não impõe limites de taxa. Os limites efetivos são provenientes de:
- Limitação do serviço de token do Microsoft Entra ID (não deve acontecer como o token de cache do SDK)
- Limites de API downstream
- Eficiência do cache de token (reduz o volume de aquisição)
Práticas recomendadas
- Prefira a configuração em vez de substituições ad hoc.
- Mantenha os nomes de serviço estáticos e declarativos.
- Implemente políticas de repetição para falhas transitórias (HTTP 500/503).
- Valide os parâmetros do agente antes de chamar.
- IDs de correlação de log para rastreamento entre serviços.
- Monitore a latência de aquisição de token e as taxas de erro.
- Use investigações de integridade em plataformas de orquestração.