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 autenticación de Microsoft Entra ID (sidecar).
Especificación de API
especificación 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.Sidecar.json
Utilícelo para:
- Generación de código de cliente
- Validar solicitudes
- Detección de puntos de conexión disponibles
Introducción al punto de conexión
| Punto final | Métodos | Propósito | Autenticación necesaria |
|---|---|---|---|
/Validate |
GET | Validar un token de portador entrante o una solicitud HTTP firmada por poP de solo aplicación y devolver 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
El portador sigue siendo el esquema de autenticación predeterminado para los puntos de conexión autenticados. El /Validate punto de conexión también acepta el PoP esquema para las credenciales de solicitud HTTP firmadas (SHR) de solo aplicación. Otros puntos de conexión autenticados requieren portador, a menos que se marque explícitamente como no autenticado:
GET /AuthorizationHeader/Graph
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGc...
Los tokens se validan con la configuración de Microsoft Entra ID configurada, como inquilino, audiencia, emisor y ámbitos cuando están habilitados. En el caso de las solicitudes poP, sidecar valida la firma SHR y su token de acceso incrustado en el mismo inquilino, audiencia, emisor y configuración de clave de firma.
/Validate
Valida un token de portador entrante o una credencial SHR PoP de solo aplicación y devuelve el token validado y sus notificaciones.
Solicitud
Solicitud de portador:
GET /Validate HTTP/1.1
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGc...
Solicitud poP:
GET /Validate HTTP/1.1
Authorization: PoP <signed-http-request>
original-method: GET
original-uri: https://api.contoso.com/data
Para poP original-method y original-uri son necesarios. Deben contener el método y el URI absoluto de la solicitud original en la que se firmó la credencial de SHR. El sidecar usa estos valores para validar el enlace de solicitud; la /Validate propia solicitud no es la solicitud de recurso firmada.
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"
}
}
El protocol valor es Bearer para una solicitud de portador y PoP para una solicitud poP. Para poP, token contiene el token de acceso validado incrustado en la solicitud HTTP firmada. Las notificaciones devueltas dependen de la configuración del inquilino y la versión del token de acceso.
Importante
La validación de poP de entrada admite tokens de acceso de credenciales de cliente de solo aplicación. No admite tokens delegados o de usuario, flujos de OBO o de token de actor, poP de mTLS o PFT/CDT-over-PoP.
AzureAd__Scopes no se aplica a las solicitudes poP de solo aplicación porque estos tokens no contienen una scp notificación. La aplicación debe autorizar la identidad de aplicación devuelta mediante sus roles, permisos de aplicación u otras notificaciones de confianza.
Ejemplos de error
Las credenciales de autorización que faltan se rechazan antes de que se ejecute el punto de conexión:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer
Un token de portador no válido devuelve un desafío de portador:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer error="invalid_token"
Una solicitud poP con error incluye el siguiente desafío. Dado que /Validate acepta ambos esquemas de autenticación, la respuesta también puede contener el desafío de portador.
HTTP/1.1 401 Unauthorized
WWW-Authenticate: PoP error="invalid_token"
/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 autenticación (sidecar) de Microsoft Entra ID no impone límites de velocidad. Los límites efectivos proceden de:
- Microsoft Entra ID limitación del servicio de token (no debe producirse 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.