Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este documento se proporciona una referencia completa para los puntos de conexión HTTP expuestos por el SDK de Microsoft Entra para AgentID.
Especificación de API
Especificación de OpenAPI: disponible en /openapi/v1.json (entorno de desarrollo) y en el repositorio: https://github.com/AzureAD/microsoft-identity-web/blob/master/src/Microsoft.Identity.Web.Sidecar/OpenAPI/Microsoft.Identity.Web.AgentID.json
Utilícelo para:
- Generación de código de cliente
- Validar solicitudes
- Detección de puntos de conexión disponibles
Información general del punto de conexión
| Punto final | Métodos | Propósito | Autenticación necesaria |
|---|---|---|---|
/Validate |
GET | Validación de un token de portador entrante y devolución de notificaciones | Sí |
/AuthorizationHeader/{serviceName} |
GET | Validación del token de entrada (si está presente) y adquisición de un encabezado de autorización para una API de bajada | Sí |
/AuthorizationHeaderUnauthenticated/{serviceName} |
GET | Adquisición de un encabezado de autorización (identidad de aplicación o agente) sin token de usuario entrante | Sí |
/DownstreamApi/{serviceName} |
GET, POST, PUT, PATCH, DELETE | Validación del token de entrada (si está presente) y llamada a la API de bajada con la adquisición automática de tokens | Sí |
/DownstreamApiUnauthenticated/{serviceName} |
GET, POST, PUT, PATCH, DELETE | Llamada a la API de bajada (solo identidad de aplicación o agente) | Sí |
/healthz |
GET | Sondeo de estado (disponibilidad y preparación) | No |
/openapi/v1.json |
GET | Documento de OpenAPI 3.0 | No (solo desarrollo) |
Autenticación
Todos los puntos de conexión de validación y adquisición de tokens requieren un token de portador en el Authorization encabezado a menos que se marque explícitamente sin autenticar:
GET /AuthorizationHeader/Graph
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGc...
Los tokens se validan con la configuración de id. de Microsoft Entra configurada (inquilino, audiencia, emisor, ámbitos si está habilitado).
/Validate
Valida el token de portador de entrada y devuelve sus notificaciones.
Solicitud
GET /Validate HTTP/1.1
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGc...
Respuesta correcta (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"
}
}
Ejemplos de errores
// 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}
Adquiere un token de acceso para la API de bajada configurada y lo devuelve como un valor de encabezado de autorización. Si se proporciona un token de portador de usuario entrante, se usa OBO (delegado); De lo contrario, se aplican patrones de contexto de aplicación (si está habilitado).
Parámetro path
-
serviceName: nombre de la API de bajada en la configuración
Parámetros de consulta
Invalidaciones estándar
| Parámetro | Tipo | Description | Example |
|---|---|---|---|
optionsOverride.Scopes |
string[] | Invalidar ámbitos configurados (repetibles) | ?optionsOverride.Scopes=User.Read&optionsOverride.Scopes=Mail.Read |
optionsOverride.RequestAppToken |
boolean | Forzar el token de solo aplicación (omitir OBO) | ?optionsOverride.RequestAppToken=true |
optionsOverride.AcquireTokenOptions.Tenant |
cuerda / cadena | Invalidación del identificador de inquilino | ?optionsOverride.AcquireTokenOptions.Tenant=tenant-guid |
optionsOverride.AcquireTokenOptions.PopPublicKey |
cuerda / cadena | Habilitación de poP/SHR (clave pública base64) | ?optionsOverride.AcquireTokenOptions.PopPublicKey=base64key |
optionsOverride.AcquireTokenOptions.PopClaims |
cuerda / cadena | Notificaciones de poP adicionales (JSON) | ?optionsOverride.AcquireTokenOptions.PopClaims={"nonce":"abc"} |
Identidad del agente
| Parámetro | Tipo | Description | Example |
|---|---|---|---|
AgentIdentity |
cuerda / cadena | Id. de aplicación del agente (cliente) | ?AgentIdentity=11111111-2222-3333-4444-555555555555 |
AgentUsername |
cuerda / cadena | Nombre principal de usuario (agente delegado) | ?AgentIdentity=<id>&AgentUsername=user@contoso.com |
AgentUserId |
cuerda / cadena | Identificador de objeto de usuario (agente delegado) | ?AgentIdentity=<id>&AgentUserId=aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee |
Reglas:
-
AgentUsernameoAgentUserIdrequerirAgentIdentity(agente de usuario). -
AgentUsernameyAgentUserIdson mutuamente excluyentes. -
AgentIdentityalone = agente autónomo. -
AgentIdentity+ token de entrada de usuario = agente delegado.
Examples
Solicitud 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...
Respuesta
{
"authorizationHeader": "Bearer eyJ0eXAiOiJKV1QiLCJhbGc..."
}
Respuesta poP/SHR:
{
"authorizationHeader": "PoP eyJ0eXAiOiJhdCtqd3QiLCJhbGc..."
}
/AuthorizationHeaderUnauthenticated/{serviceName}
Se espera el mismo comportamiento y parámetros que /AuthorizationHeader/{serviceName} , pero no se espera ningún token de usuario entrante. Se usa para la adquisición de identidades solo para aplicaciones o agentes o autónomos sin un contexto de usuario. Evita la sobrecarga de validar un token de usuario.
Solicitud
GET /AuthorizationHeaderUnauthenticated/Graph HTTP/1.1
Respuesta
{
"authorizationHeader": "Bearer eyJ0eXAiOiJKV1QiLCJhbGc..."
}
/DownstreamApi/{serviceName}
Adquiere un token de acceso y realiza una solicitud HTTP a la API de bajada. Devuelve el código de estado, los encabezados y el cuerpo de la respuesta de bajada. Admite patrones de identidad de usuario OBO, solo aplicación o agente.
Parámetro path
-
serviceName: se ha configurado el nombre de la API de bajada.
Parámetros de consulta adicionales (además de /AuthorizationHeader parámetros)
| Parámetro | Tipo | Description | Example |
|---|---|---|---|
optionsOverride.HttpMethod |
cuerda / cadena | Invalidación del método HTTP | ?optionsOverride.HttpMethod=POST |
optionsOverride.RelativePath |
cuerda / cadena | Anexar la ruta de acceso relativa a BaseUrl configurada | ?optionsOverride.RelativePath=me/messages |
optionsOverride.CustomHeader.<Name> |
cuerda / cadena | Agregar encabezados personalizados | ?optionsOverride.CustomHeader.X-Custom=value |
Reenvío del cuerpo de la solicitud
El cuerpo se pasa sin cambios:
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" }
}
Respuesta
{
"statusCode": 200,
"headers": {
"content-type": "application/json"
},
"content": "{\"@odata.context\":\"...\",\"displayName\":\"...\"}"
}
Reflejo de errores /AuthorizationHeader más códigos de estado de error de API de bajada.
/DownstreamApiUnauthenticated/{serviceName}
Igual que /DownstreamApi/{serviceName} pero no se valida ningún token de usuario entrante. Use para las operaciones solo de aplicación o agente autónomo.
/healthz
Punto de conexión de sondeo de estado básico.
Respuesta
Correcto (200):
HTTP/1.1 200 OK
Incorrecto (503):
HTTP/1.1 503 Service Unavailable
/openapi/v1.json
Devuelve la especificación OpenAPI 3.0 (solo entorno de desarrollo). Use para:
- Generación de código de cliente
- Validar solicitudes
- Detección de puntos de conexión
Patrones de error comunes
Solicitud incorrecta (400)
Falta el nombre del servicio:
// 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" }
Ejemplo de error de 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": "..." } }
Referencia de invalidación 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
Ejemplos de invalidación
Invalidar ámbitos:
GET /AuthorizationHeader/Graph?optionsOverride.Scopes=User.Read&optionsOverride.Scopes=Mail.Read HTTP/1.1
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGc...
Limitación de velocidad
El SDK de Microsoft Entra para AgentID no impone límites de velocidad. Los límites efectivos proceden de:
- Limitación del servicio de token de Id. de Microsoft Entra (no debe ocurrir como token de caché del SDK)
- Límites de API de bajada
- Eficacia de la caché de tokens (reduce el volumen de adquisición)
Procedimientos recomendados
- Prefiere la configuración en invalidaciones ad hoc.
- Mantenga los nombres de servicio estáticos y declarativos.
- Implemente directivas de reintento para errores transitorios (HTTP 500/503).
- Valide los parámetros del agente antes de llamar a .
- Identificadores de correlación de registro para el seguimiento entre servicios.
- Supervise la latencia de adquisición de tokens y las tasas de error.
- Use sondeos de estado en plataformas de orquestación.