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 referência completa para os pontos de extremidade HTTP expostos pelo SDK de Autenticação Microsoft Entra ID (sidecar).
Especificação da API
especificação 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.Sidecar.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 ou solicitação HTTP assinada somente por aplicativo 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
O portador continua sendo o esquema de autenticação padrão para pontos de extremidade autenticados. O /Validate ponto de extremidade também aceita o PoP esquema para credenciais SHR (Solicitação HTTP Assinada) somente por aplicativo. Outros pontos de extremidade autenticados exigem portador, a menos que seja explicitamente marcado como não autenticado:
GET /AuthorizationHeader/Graph
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGc...
Os tokens são validados em relação às configurações de Microsoft Entra ID definidas, incluindo locatário, audiência, emissor e escopos quando habilitados. Para solicitações pop, o sidecar valida a assinatura SHR e seu token de acesso inserido em relação ao mesmo locatário, audiência, emissor e configuração de chave de assinatura.
/Validate
Valida um token de portador de entrada ou credencial SHR PoP somente de aplicativo e retorna o token validado e suas declarações.
Solicitação
Solicitação do portador:
GET /Validate HTTP/1.1
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGc...
Solicitação pop:
GET /Validate HTTP/1.1
Authorization: PoP <signed-http-request>
original-method: GET
original-uri: https://api.contoso.com/data
Para PoP e original-methodoriginal-uri são necessários. Eles devem conter o método e o URI absoluto da solicitação original pela qual a credencial SHR foi assinada. O sidecar usa esses valores para validar a associação de solicitação; a /Validate solicitação em si não é a solicitação de recurso assinada.
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"
}
}
O protocol valor é Bearer para uma solicitação de portador e PoP para uma solicitação PoP. Para PoP, token contém o token de acesso validado inserido na solicitação HTTP assinada. As declarações retornadas dependem da versão do token de acesso e da configuração do locatário.
Importante
A validação pop de entrada dá suporte a tokens de acesso de credenciais de cliente somente aplicativo. Ele não dá suporte a tokens delegados ou de usuário, OBO ou fluxos de token de ator, mTLS PoP ou PFT/CDT-over-PoP.
AzureAd__Scopes não é aplicado a solicitações PoP somente de aplicativo porque esses tokens não contêm uma declaração scp . Seu aplicativo deve autorizar a identidade de aplicativo retornada usando suas funções, permissões de aplicativo ou outras declarações confiáveis.
Exemplos de erro
As credenciais de autorização ausentes são rejeitadas antes da execução do ponto de extremidade:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer
Um token de portador inválido retorna um desafio de portador:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer error="invalid_token"
Uma solicitação PoP com falha inclui o desafio a seguir. Como /Validate aceita ambos os esquemas de autenticação, a resposta também pode conter o desafio portador.
HTTP/1.1 401 Unauthorized
WWW-Authenticate: PoP error="invalid_token"
/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 de caminho
-
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 de caminho
-
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 |
Solicitar encaminhamento do corpo
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 próprio SDK de autenticação de Microsoft Entra ID (sidecar) não impõe limites de taxa. Os limites efetivos são provenientes de:
- Microsoft Entra ID limitação do serviço de token (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.