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.
Conecte seus agentes do Microsoft Foundry a APIs externas usando especificações do OpenAPI 3.0 e 3.1. O modelo foundry que alimenta seu agente pode chamar serviços externos, recuperar dados em tempo real e estender seus recursos além das funções internas.
As especificações do OpenAPI definem uma maneira padrão de descrever APIs HTTP para que você possa integrar serviços existentes aos seus agentes. Microsoft Foundry dá suporte a três métodos de autenticação: anonymous, API key e managed identity. Para obter ajuda para escolher um método de autenticação, consulte Escolher um método de autenticação.
Suporte ao uso
A tabela a seguir mostra o SDK e o suporte à instalação.
| Suporte ao Microsoft Foundry | SDK do Python | C# SDK | JavaScript SDK | SDK do Java | API REST | Configuração básica do agente | Configuração do agente padrão |
|---|---|---|---|---|---|---|---|
| ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Nota
Para Java, use o pacote com.azure:azure-ai-agents para ferramentas do agente OpenAPI. No com.azure:azure-ai-projects momento, o pacote não expõe tipos de ferramentas do agente OpenAPI.
Pré-requisitos
Antes de começar, verifique se você tem:
- Uma assinatura Azure com as permissões corretas.
- função de RBAC do Azure: Contribuidor ou Proprietário no projeto Foundry.
- Um projeto da Foundry criado com um ponto de extremidade configurado.
- Um modelo de IA implantado em seu projeto.
- Um ambiente de agente básico ou padrão.
- SDK instalado para seu idioma preferido:
- Python:
azure-ai-projects - C#:
Azure.AI.Extensions.OpenAI - TypeScript/JavaScript:
@azure/ai-projects - Java:
com.azure:azure-ai-agents
- Python:
Variáveis de ambiente
| Variável | Descrição |
|---|---|
FOUNDRY_PROJECT_ENDPOINT |
A URL do endpoint do projeto do Foundry (não o endpoint do serviço OpenAPI externo). |
FOUNDRY_MODEL_DEPLOYMENT_NAME |
O nome do modelo implantado. |
OPENAPI_PROJECT_CONNECTION_NAME |
(Para autenticação de chave de API) O nome da conexão do projeto para o serviço OpenAPI. |
- Arquivo de especificação OpenAPI 3.0 ou 3.1 que atende a estes requisitos:
- Cada função deve ter uma
operationId(necessária para a ferramenta OpenAPI). -
operationIddeve conter apenas letras,-e_. - Use nomes descritivos para ajudar os modelos a decidir com eficiência qual função usar.
- Tipos de conteúdo do corpo da solicitação com suporte:
application/json,application/json-patch+json
- Cada função deve ter uma
- Para autenticação de identidade gerenciada: função de Leitor ou superior em recursos de serviço de destino.
- Para autenticação de chave/token de API: uma conexão de projeto configurada com sua chave de API ou token. Consulte Adicionar uma nova conexão ao seu projeto.
Nota
O valor FOUNDRY_PROJECT_ENDPOINT refere-se ao ponto de extremidade do projeto Microsoft Foundry, não ao ponto de extremidade de serviço OpenAPI externo. Você pode encontrar esse ponto de extremidade no portal do Microsoft Foundry na página Visão Geral do projeto. Esse ponto de extremidade é necessário para autenticar o serviço do agente e é separado de todos os pontos de extremidade OpenAPI definidos em seu arquivo de especificação.
Entender as limitações
- Sua especificação OpenAPI deve incluir
operationIdpara cada operação eoperationIdpode incluir apenas letras e-_. - Tipos de conteúdo do corpo da solicitação com suporte:
application/json,application/json-patch+json. - Para autenticação de chave de API, use um esquema de segurança de chave de API para cada ferramenta OpenAPI. Se você precisar de vários esquemas de segurança, crie várias ferramentas OpenAPI.
Exemplo de código
Nota
- Você precisa do pacote mais recente do SDK. O SDK do .NET está atualmente em versão prévia. Confira o início rápido para obter detalhes.
- Se você usar a chave de API para autenticação, sua ID de conexão deverá estar no formato de
/subscriptions/{{subscriptionID}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.CognitiveServices/accounts/{{foundryAccountName}}/projects/{{foundryProjectName}}/connections/{{foundryConnectionName}}.
Importante
Para que a autenticação de chave de API funcione, o arquivo de especificação OpenAPI deve incluir:
- Uma
securitySchemesseção com a configuração da chave de API, como o nome do cabeçalho e o nome do parâmetro. - Uma
securityseção que faz referência ao esquema de segurança. - Uma conexão de projeto configurada com o nome e o valor da chave correspondentes.
Sem essas configurações, a chave de API não é incluída nas solicitações. Para obter instruções detalhadas de instalação, consulte a seção Autenticar com chave de API .
Você também pode usar a autenticação baseada em token (por exemplo, um token de portador) armazenando o token em uma conexão de projeto. Para autenticação de token de portador, crie uma conexão de chaves personalizadas com a chave definida como Authorization e o valor definido como Bearer <token> (substitua <token> pelo token real). A palavra Bearer seguida por um espaço deve ser incluída no valor. Para obter detalhes, consulte Configurar uma conexão de token portador.
Exemplo completo
import os
import jsonref
from typing import Any, cast
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import (
PromptAgentDefinition,
OpenApiTool,
OpenApiFunctionDefinition,
OpenApiAnonymousAuthDetails,
)
# Format: "https://resource_name.ai.azure.com/api/projects/project_name"
PROJECT_ENDPOINT = "your_project_endpoint"
OPENAPI_CONNECTION_NAME = "my-openapi-connection"
# Create clients to call Foundry API
project = AIProjectClient(
endpoint=PROJECT_ENDPOINT,
credential=DefaultAzureCredential(),
)
openai = project.get_openai_client()
weather_asset_file_path = os.path.abspath(
os.path.join(os.path.dirname(__file__), "../assets/weather_openapi.json")
)
with open(weather_asset_file_path, "r") as f:
openapi_weather = cast(dict[str, Any], jsonref.loads(f.read()))
# Initialize agent OpenAPI tool using the read in OpenAPI spec
weather_tool = OpenApiTool(
openapi=OpenApiFunctionDefinition(
name="get_weather",
spec=openapi_weather,
description="Retrieve weather information for a location.",
auth=OpenApiAnonymousAuthDetails(),
)
)
# If you want to use key-based authentication
# IMPORTANT: Your OpenAPI spec must include securitySchemes and security sections
# Example spec structure for API key auth:
# {
# "components": {
# "securitySchemes": {
# "apiKeyHeader": {
# "type": "apiKey",
# "name": "x-api-key", # This must match the key name in your project connection
# "in": "header"
# }
# }
# },
# "security": [{"apiKeyHeader": []}]
# }
#
# For Bearer token authentication, use this securitySchemes structure instead:
# {
# "components": {
# "securitySchemes": {
# "bearerAuth": {
# "type": "apiKey",
# "name": "Authorization",
# "in": "header"
# }
# }
# },
# "security": [{"bearerAuth": []}]
# }
# Then set connection key = "Authorization" and value = "Bearer <token>"
# The word "Bearer" followed by a space MUST be included in the value.
openapi_connection = project.connections.get(OPENAPI_CONNECTION_NAME)
connection_id = openapi_connection.id
openapi_key_auth_tool = {
"type": "openapi",
"openapi": {
"name": "get_weather",
"spec": openapi_weather, # Must include securitySchemes and security sections
"auth": {
"type": "project_connection",
"security_scheme": {
"project_connection_id": connection_id
}
},
}
}
# If you want to use Managed Identity authentication
openapi_mi_auth_tool = {
"type": "openapi",
"openapi": {
"name": "get_weather",
"description": "Retrieve weather information for a location.",
"spec": openapi_weather,
"auth": {
"type": "managed_identity",
"security_scheme": {
"audience": "https://storage.azure.com" # Resource identifier of the target service
}
},
}
}
agent = project.agents.create_version(
agent_name="MyAgent",
definition=PromptAgentDefinition(
model="gpt-4.1-mini",
instructions="You are a helpful assistant.",
tools=[weather_tool],
),
)
response = openai.responses.create(
input="What's the weather in Seattle?",
extra_body={"agent_reference": {"name": agent.name, "type": "agent_reference"}},
)
print(response.output_text)
# Clean up resources
project.agents.delete_version(agent_name=agent.name, agent_version=agent.version)
O que esse código faz
Este exemplo cria um agente com uma ferramenta OpenAPI que chama a API de clima wttr.in usando autenticação anônima. Ao executar o código:
- Ele carrega a especificação openAPI do tempo de um arquivo JSON local.
- Cria um agente com a ferramenta de clima configurada para acesso anônimo.
- Envia uma consulta perguntando sobre o tempo de Seattle.
- O agente usa a ferramenta OpenAPI para chamar a API do tempo e retorna resultados formatados.
- Limpa excluindo a versão do agente.
Entradas necessárias
- Valores de cadeia de caracteres na parte superior do script:
PROJECT_ENDPOINT,OPENAPI_CONNECTION_NAME - Arquivo local:
weather_openapi.json(especificação OpenAPI)
Saída esperada
Agent created (id: asst_abc123, name: MyAgent23, version: 1)
Response created: The weather in Seattle is currently cloudy with a temperature of 52°F (11°C)...
Cleaning up...
Agent deleted
Erros comuns
-
FileNotFoundError: arquivo de especificação OpenAPI não encontrado no caminho especificado -
AuthenticationError: credenciais inválidas ou permissões insuficientes ou ausentessecuritySchemesna especificação OpenAPI para autenticação de chave de API - Formato inválido
operationIdna especificação OpenAPI causa falha no registro da ferramenta -
Chave de API não injetada: verifique se a especificação OpenAPI inclui ambas as seções
securitySchemesesecurity, e se o nome da chave corresponde à conexão do projeto.
Exemplo de uso de agentes com a ferramenta OpenAPI
Este exemplo demonstra como usar os serviços descritos por uma especificação OpenAPI usando um agente. Ele usa o serviço wttr.in para obter o clima e seu arquivo de especificação weather_openapi.json. Este exemplo usa métodos síncronos da biblioteca de cliente do Azure AI Projects. Para obter um exemplo que usa métodos assíncronos, consulte o sample no SDK do Azure para .NET repositório no GitHub.
using System;
using System.IO;
using System.Runtime.CompilerServices;
using Azure.AI.Projects;
using Azure.AI.Extensions.OpenAI;
using Azure.Identity;
class OpenAPIDemo
{
// Utility method to get the OpenAPI specification file from the Assets folder.
private static string GetFile([CallerFilePath] string pth = "")
{
var dirName = Path.GetDirectoryName(pth) ?? "";
return Path.Combine(dirName, "Assets", "weather_openapi.json");
}
public static void Main()
{
// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
var projectEndpoint = "your_project_endpoint";
// Create project client to call Foundry API
AIProjectClient projectClient = new(
endpoint: new Uri(projectEndpoint),
tokenProvider: new DefaultAzureCredential());
// Create an Agent with `OpenAPIAgentTool` and anonymous authentication.
string filePath = GetFile();
OpenAPIFunctionDefinition toolDefinition = new(
name: "get_weather",
spec: BinaryData.FromBytes(File.ReadAllBytes(filePath)),
auth: new OpenAPIAnonymousAuthenticationDetails()
);
toolDefinition.Description = "Retrieve weather information for a location.";
OpenAPITool openapiTool = new(toolDefinition);
// Create the agent definition and the agent version.
DeclarativeAgentDefinition agentDefinition = new(model: "gpt-4.1-mini")
{
Instructions = "You are a helpful assistant.",
Tools = { openapiTool }
};
AgentVersion agentVersion = projectClient.AgentAdministrationClient.CreateAgentVersion(
agentName: "myAgent",
options: new(agentDefinition));
// Create a response object and ask the question about the weather in Seattle, WA.
ProjectResponsesClient responseClient = projectClient.ProjectOpenAIClient.GetProjectResponsesClientForAgent(agentVersion.Name);
ResponseResult response = responseClient.CreateResponse(
userInputText: "Use the OpenAPI tool to print out, what is the weather in Seattle, WA today."
);
Console.WriteLine(response.GetOutputText());
// Finally, delete all the resources created in this sample.
projectClient.AgentAdministrationClient.DeleteAgentVersion(agentName: agentVersion.Name, agentVersion: agentVersion.Version);
}
}
O que esse código faz
Este exemplo de C# cria um agente com uma ferramenta OpenAPI que recupera informações meteorológicas de wttr.in usando autenticação anônima. Ao executar o código:
- Ele lê a especificação openAPI do tempo de um arquivo JSON local.
- Cria um agente com a ferramenta meteorológica configurada.
- Envia uma solicitação perguntando sobre o clima de Seattle usando a ferramenta OpenAPI.
- O agente chama a API do tempo e retorna os resultados.
- Limpa excluindo o agente.
Entradas necessárias
- Valor da string embutida:
projectEndpoint(ponto de extremidade do projeto Foundry) - Arquivo local:
Assets/weather_openapi.json(especificação OpenAPI)
Saída esperada
The weather in Seattle, WA today is cloudy with temperatures around 52°F...
Erros comuns
-
FileNotFoundException: arquivo de especificação OpenAPI não encontrado na pasta Ativos -
UnauthorizedAccessException: credenciais inválidas ou permissões RBAC insuficientes -
Chave de API não injetada: verifique se sua especificação OpenAPI inclui ambas as seções
securitySchemes(emcomponents) esecuritycom nomes de esquema correspondentes
Exemplo de uso de agentes com a ferramenta OpenAPI no serviço Web, exigindo autenticação
Neste exemplo, você usa serviços com uma especificação OpenAPI usando o agente em um cenário que requer autenticação. Use a especificação do TripAdvisor.
O serviço TripAdvisor requer autenticação baseada em chave. Para criar uma conexão no portal Azure, abra Microsoft Foundry e, no painel esquerdo, selecione Management center e selecione Conectados. Por fim, crie uma nova conexão do tipo de chaves personalizadas . Nomeie-o tripadvisor e adicione um par de valores de chave. Adicione uma chave nomeada key e insira um valor com sua chave do TripAdvisor.
class OpenAPIConnectedDemo
{
// Utility method to get the OpenAPI specification file from the Assets folder.
private static string GetFile([CallerFilePath] string pth = "")
{
var dirName = Path.GetDirectoryName(pth) ?? "";
return Path.Combine(dirName, "Assets", "tripadvisor_openapi.json");
}
public static void Main()
{
// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
var projectEndpoint = "your_project_endpoint";
// Create project client to call Foundry API
AIProjectClient projectClient = new(
endpoint: new Uri(projectEndpoint),
tokenProvider: new DefaultAzureCredential());
// Create an Agent with `OpenAPIAgentTool` and authentication by project connection security scheme.
string filePath = GetFile();
AIProjectConnection tripadvisorConnection = projectClient.Connections.GetConnection("tripadvisor");
OpenAPIFunctionDefinition toolDefinition = new(
name: "tripadvisor",
spec: BinaryData.FromBytes(File.ReadAllBytes(filePath)),
auth: new OpenAPIProjectConnectionAuthenticationDetails(new OpenAPIProjectConnectionSecurityScheme(
projectConnectionId: tripadvisorConnection.Id
))
);
toolDefinition.Description = "Trip Advisor API to get travel information.";
OpenAPITool openapiTool = new(toolDefinition);
// Create the agent definition and the agent version.
DeclarativeAgentDefinition agentDefinition = new(model: "gpt-4.1-mini")
{
Instructions = "You are a helpful assistant.",
Tools = { openapiTool }
};
AgentVersion agentVersion = projectClient.AgentAdministrationClient.CreateAgentVersion(
agentName: "myAgent",
options: new(agentDefinition));
// Create a response object and ask the question about the hotels in France.
// Test the Web service access before you run production scenarios.
// It can be done by setting:
// ToolChoice = ResponseToolChoice.CreateRequiredChoice()`
// in the ResponseCreationOptions. This setting will
// force Agent to use tool and will trigger the error if it is not accessible.
ProjectResponsesClient responseClient = projectClient.ProjectOpenAIClient.GetProjectResponsesClientForAgent(agentVersion.Name);
CreateResponseOptions responseOptions = new()
{
ToolChoice = ResponseToolChoice.CreateRequiredChoice(),
InputItems =
{
ResponseItem.CreateUserMessageItem("Recommend me 5 top hotels in paris, France."),
}
};
ResponseResult response = responseClient.CreateResponse(
options: responseOptions
);
Console.WriteLine(response.GetOutputText());
// Finally, delete all the resources we have created in this sample.
projectClient.AgentAdministrationClient.DeleteAgentVersion(agentName: agentVersion.Name, agentVersion: agentVersion.Version);
}
}
O que esse código faz
Este exemplo de C# demonstra o uso de uma ferramenta OpenAPI com autenticação de chave de API por meio de uma conexão de projeto. Ao executar o código:
- Ele carrega a especificação OpenAPI do TripAdvisor de um arquivo local.
- Obtém a conexão de projeto
tripadvisorque contém sua chave de API. - Cria um agente com a ferramenta TripAdvisor configurada para usar a conexão para autenticação.
- Envia um pedido de recomendações de hotel em Paris.
- O agente chama a API do TripAdvisor usando sua chave de API armazenada e retorna resultados.
- Limpa excluindo o agente.
Entradas necessárias
- Valor da string embutida:
projectEndpoint(ponto de extremidade do projeto Foundry) - Arquivo local:
Assets/tripadvisor_openapi.json - Conexão do projeto:
tripadvisorcom a chave de API válida configurada
Saída esperada
Here are 5 top hotels in Paris, France:
1. Hotel Name - Rating: 4.5/5, Location: ...
2. Hotel Name - Rating: 4.4/5, Location: ...
...
Erros comuns
-
ConnectionNotFoundException: nenhuma conexão de projeto nomeadatripadvisorencontrada. -
AuthenticationException: chave de API inválida na conexão do projeto ou configuração ausente/incorretasecuritySchemesna especificação OpenAPI. - Ferramenta não usada: Verificar
ToolChoice = ResponseToolChoice.CreateRequiredChoice()força o uso da ferramenta. -
Chave de API não passada para a API: Verifique se a especificação OpenAPI tem as seções adequadas
securitySchemesesecurityconfiguradas.
Criar um agente Java com recursos de ferramenta OpenAPI
Este exemplo Java cria um agente com uma ferramenta OpenAPI usando com.azure:azure-ai-agents e um arquivo de especificação OpenAPI local. O exemplo usa autenticação anônima e chama um endpoint de API pública.
import com.azure.ai.agents.AgentsClient;
import com.azure.ai.agents.AgentsClientBuilder;
import com.azure.ai.agents.ConversationsClient;
import com.azure.ai.agents.ResponsesClient;
import com.azure.ai.agents.models.*;
import com.azure.core.util.BinaryData;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.json.JsonProviders;
import com.azure.json.JsonReader;
import com.openai.models.conversations.Conversation;
import com.openai.models.conversations.items.ItemCreateParams;
import com.openai.models.responses.EasyInputMessage;
import com.openai.models.responses.Response;
import com.openai.models.responses.ResponseCreateParams;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Map;
public class OpenApiAgentJavaSample {
public static void main(String[] args) throws Exception {
// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
String projectEndpoint = "your_project_endpoint";
AgentsClientBuilder builder = new AgentsClientBuilder()
.endpoint(projectEndpoint)
.credential(new DefaultAzureCredentialBuilder().build());
AgentsClient agentsClient = builder.buildAgentsClient();
ResponsesClient responsesClient = builder.buildResponsesClient();
ConversationsClient conversationsClient = builder.buildConversationsClient();
Map<String, BinaryData> spec = OpenApiFunctionDefinition.readSpecFromFile(
Paths.get("openapi_spec.json"));
OpenApiFunctionDefinition toolDefinition = new OpenApiFunctionDefinition(
"httpbin_get",
spec,
new OpenApiAnonymousAuthDetails())
.setDescription("Get request metadata from an OpenAPI endpoint.");
PromptAgentDefinition agentDefinition = new PromptAgentDefinition("gpt-4.1-mini")
.setInstructions("Use the OpenAPI tool for HTTP request metadata.")
.setTools(Arrays.asList(new OpenApiTool(toolDefinition)));
AgentVersionDetails agentVersion = agentsClient.createAgentVersion("openapiValidationAgentJava", agentDefinition);
System.out.println("Agent: " + agentVersion.getName() + ", version: " + agentVersion.getVersion());
Conversation conversation = conversationsClient.getConversationService().create();
conversationsClient.getConversationService().items().create(
ItemCreateParams.builder()
.conversationId(conversation.id())
.addItem(EasyInputMessage.builder()
.role(EasyInputMessage.Role.USER)
.content("Use the OpenAPI tool and summarize the returned URL and origin in one sentence.")
.build())
.build());
try {
AgentReference agentReference = new AgentReference(agentVersion.getName()).setVersion(agentVersion.getVersion());
ResponseCreateParams.Builder options = ResponseCreateParams.builder().maxOutputTokens(300L);
Response response = responsesClient.createAzureResponse(
new AzureCreateResponseOptions().setAgentReference(agentReference),
options.conversation(conversation.id()));
String text = response.output().stream()
.filter(item -> item.isMessage())
.map(item -> item.asMessage().content()
.get(item.asMessage().content().size() - 1)
.asOutputText()
.text())
.reduce((first, second) -> second)
.orElse("<no message output>");
System.out.println("Status: " + response.status().map(Object::toString).orElse("unknown"));
System.out.println("Response: " + text);
} finally {
agentsClient.deleteAgentVersion(agentVersion.getName(), agentVersion.getVersion());
System.out.println("Agent deleted");
}
}
}
O que esse código faz
Este exemplo em Java cria um agente com uma ferramenta OpenAPI e executa uma resposta com escopo de conversação.
- Carrega a especificação OpenAPI de
openapi_spec.json. - Cria uma versão do agente com
OpenApiTool. - Cria uma conversa e adiciona uma mensagem de usuário.
- Cria uma resposta passando
AgentReferencee a ID da conversa. - Limpa excluindo a versão do agente.
Entradas necessárias
- Valor da string embutida:
projectEndpoint(ponto de extremidade do projeto Foundry) - Arquivo local:
openapi_spec.json(especificação do OpenAPI 3.0 ou 3.1)
Saída esperada
Agent: openapiValidationAgentJava, version: 1
Status: completed
Response: The API response reports URL ... and origin ...
Agent deleted
Erros comuns
-
Invalid OpenAPI specification: analise o JSON do OpenAPI em um objeto antes de passá-lo paraOpenApiFunctionDefinition. -
Invalid conversation id: crie uma conversa e passeconversation.id()paracreateAzureResponseviaResponseCreateParams.builder().conversation(). -
AuthenticationFailedException: VerifiqueDefaultAzureCredentialse pode obter um token para a conta na qual você está conectado.
Os exemplos a seguir mostram como chamar uma ferramenta OpenAPI usando a API REST.
Obtenha um token de acesso:
export AGENT_TOKEN=$(az account get-access-token --scope "https://ai.azure.com/.default" --query accessToken -o tsv)
Autenticação anônima
curl --request POST \
--url "$FOUNDRY_PROJECT_ENDPOINT/openai/v1/responses" \
--header "Authorization: Bearer $AGENT_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"model": "'$FOUNDRY_MODEL_DEPLOYMENT_NAME'",
"input": "Use the OpenAPI tool to get the weather in Seattle, WA today.",
"tools": [
{
"type": "openapi",
"openapi": {
"name": "weather",
"description": "Tool to get weather data",
"auth": { "type": "anonymous" },
"spec": {
"openapi": "3.1.0",
"info": {
"title": "get weather data",
"description": "Retrieves current weather data for a location.",
"version": "v1.0.0"
},
"servers": [{ "url": "https://wttr.in" }],
"paths": {
"/{location}": {
"get": {
"description": "Get weather information for a specific location",
"operationId": "GetCurrentWeather",
"parameters": [
{
"name": "location",
"in": "path",
"description": "City or location to retrieve the weather for",
"required": true,
"schema": { "type": "string" }
},
{
"name": "format",
"in": "query",
"description": "Format in which to return data. Always use 3.",
"required": true,
"schema": { "type": "integer", "default": 3 }
}
],
"responses": {
"200": {
"description": "Successful response",
"content": {
"text/plain": {
"schema": { "type": "string" }
}
}
},
"404": { "description": "Location not found" }
}
}
}
}
}
}
}
]
}'
Autenticação de chave de API (conexão de projeto)
curl --request POST \
--url "$FOUNDRY_PROJECT_ENDPOINT/openai/v1/responses" \
--header "Authorization: Bearer $AGENT_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"model": "'$FOUNDRY_MODEL_DEPLOYMENT_NAME'",
"input": "Use the OpenAPI tool to get the weather in Seattle, WA today.",
"tools": [
{
"type": "openapi",
"openapi": {
"name": "weather",
"description": "Tool to get weather data",
"auth": {
"type": "project_connection",
"security_scheme": {
"project_connection_id": "'$WEATHER_APP_PROJECT_CONNECTION_ID'"
}
},
"spec": {
"openapi": "3.1.0",
"info": {
"title": "get weather data",
"description": "Retrieves current weather data for a location.",
"version": "v1.0.0"
},
"servers": [{ "url": "https://wttr.in" }],
"paths": {
"/{location}": {
"get": {
"description": "Get weather information for a specific location",
"operationId": "GetCurrentWeather",
"parameters": [
{
"name": "location",
"in": "path",
"description": "City or location to retrieve the weather for",
"required": true,
"schema": { "type": "string" }
},
{
"name": "format",
"in": "query",
"description": "Format in which to return data. Always use 3.",
"required": true,
"schema": { "type": "integer", "default": 3 }
}
],
"responses": {
"200": {
"description": "Successful response",
"content": {
"text/plain": {
"schema": { "type": "string" }
}
}
},
"404": { "description": "Location not found" }
}
}
}
},
"components": {
"securitySchemes": {
"apiKeyHeader": {
"type": "apiKey",
"name": "x-api-key",
"in": "header"
}
}
},
"security": [
{ "apiKeyHeader": [] }
]
}
}
}
]
}'
Autenticação de identidade gerenciada
curl --request POST \
--url "$FOUNDRY_PROJECT_ENDPOINT/openai/v1/responses" \
--header "Authorization: Bearer $AGENT_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"model": "'$FOUNDRY_MODEL_DEPLOYMENT_NAME'",
"input": "Use the OpenAPI tool to get the weather in Seattle, WA today.",
"tools": [
{
"type": "openapi",
"openapi": {
"name": "weather",
"description": "Tool to get weather data",
"auth": {
"type": "managed_identity",
"security_scheme": {
"audience": "'$MANAGED_IDENTITY_AUDIENCE'"
}
},
"spec": {
"openapi": "3.1.0",
"info": {
"title": "get weather data",
"description": "Retrieves current weather data for a location.",
"version": "v1.0.0"
},
"servers": [{ "url": "https://wttr.in" }],
"paths": {
"/{location}": {
"get": {
"description": "Get weather information for a specific location",
"operationId": "GetCurrentWeather",
"parameters": [
{
"name": "location",
"in": "path",
"description": "City or location to retrieve the weather for",
"required": true,
"schema": { "type": "string" }
},
{
"name": "format",
"in": "query",
"description": "Format in which to return data. Always use 3.",
"required": true,
"schema": { "type": "integer", "default": 3 }
}
],
"responses": {
"200": {
"description": "Successful response",
"content": {
"text/plain": {
"schema": { "type": "string" }
}
}
},
"404": { "description": "Location not found" }
}
}
}
}
}
}
}
]
}'
O que esse código faz
Este exemplo de API REST mostra como chamar uma ferramenta OpenAPI com métodos de autenticação diferentes. A solicitação:
- Envia uma consulta ao agente perguntando sobre o tempo de Seattle.
- Inclui a definição embutida da ferramenta OpenAPI em linha com a especificação da API de previsão do tempo.
- Mostra três opções de autenticação (anônimo, chave de API por meio de conexão de projeto, identidade gerenciada) como alternativas comentadas.
- O agente usa a ferramenta para chamar a API de clima e retorna resultados formatados.
Entradas necessárias
- Variáveis de ambiente:
FOUNDRY_PROJECT_ENDPOINT, ,AGENT_TOKEN.FOUNDRY_MODEL_DEPLOYMENT_NAME - Para autenticação de chave de API:
WEATHER_APP_PROJECT_CONNECTION_ID. - Para autenticação de identidade gerenciada:
MANAGED_IDENTITY_AUDIENCE. - Especificação openapi embutida no corpo da solicitação.
Saída esperada
{
"id": "resp_abc123",
"object": "response",
"output": [
{
"type": "message",
"content": [
{
"type": "text",
"text": "The weather in Seattle, WA today is cloudy with a temperature of 52°F (11°C)..."
}
]
}
]
}
Erros comuns
-
401 Unauthorized: inválido ou ausenteAGENT_TOKEN, ou chave de API não injetada porquesecuritySchemesesecurityestão ausentes em sua especificação OpenAPI -
404 Not Found: nome de implantação de modelo ou ponto de extremidade incorreto -
400 Bad Request: especificação de OpenAPI malformada ou configuração de autenticação inválida -
Chave de API não enviada com solicitação: verifique se a
components.securitySchemesseção em sua especificação OpenAPI está configurada corretamente (não vazia) e corresponde ao nome da chave de conexão do projeto
Criar um agente com recursos de ferramenta OpenAPI
O exemplo de código TypeScript a seguir demonstra como criar um agente de IA com recursos da ferramenta OpenAPI, usando o cliente dos projetos de IA do Azure e sincronizado. O agente pode chamar APIs externas definidas pelas especificações do OpenAPI. Para obter uma versão javaScript deste exemplo, consulte o sample no repositório SDK do Azure para JavaScript no GitHub.
import { DefaultAzureCredential } from "@azure/identity";
import {
AIProjectClient,
OpenApiTool,
OpenApiFunctionDefinition,
OpenApiAnonymousAuthDetails,
} from "@azure/ai-projects";
import * as fs from "fs";
import * as path from "path";
// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
const PROJECT_ENDPOINT = "your_project_endpoint";
const weatherSpecPath = path.resolve(__dirname, "../assets", "weather_openapi.json");
function loadOpenApiSpec(specPath: string): unknown {
if (!fs.existsSync(specPath)) {
throw new Error(`OpenAPI specification not found at: ${specPath}`);
}
try {
const data = fs.readFileSync(specPath, "utf-8");
return JSON.parse(data);
} catch (error) {
throw new Error(`Failed to read or parse OpenAPI specification at ${specPath}: ${error}`);
}
}
function createWeatherTool(spec: unknown): OpenApiTool {
const auth: OpenApiAnonymousAuthDetails = { type: "anonymous" };
const definition: OpenApiFunctionDefinition = {
name: "get_weather",
description: "Retrieve weather information for a location using wttr.in",
spec,
auth,
};
return {
type: "openapi",
openapi: definition,
};
}
export async function main(): Promise<void> {
const weatherSpec = loadOpenApiSpec(weatherSpecPath);
// Create clients to call Foundry API
const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
const openai = project.getOpenAIClient();
// Create an agent with the OpenAPI weather tool
const agent = await project.agents.createVersion("MyOpenApiAgent", {
kind: "prompt",
model: "gpt-4.1-mini",
instructions:
"You are a helpful assistant that can call external APIs defined by OpenAPI specs to answer user questions.",
tools: [createWeatherTool(weatherSpec)],
});
// Send a request and stream the response
const streamResponse = await openai.responses.create(
{
input:
"What's the weather in Seattle and how should I plan my outfit for the day based on the forecast?",
stream: true,
},
{
body: {
agent: { name: agent.name, type: "agent_reference" },
tool_choice: "required",
},
},
);
// Process the streaming response
for await (const event of streamResponse) {
if (event.type === "response.output_text.delta") {
process.stdout.write(event.delta);
} else if (event.type === "response.output_text.done") {
console.log("\n");
}
}
// Clean up resources
await project.agents.deleteVersion(agent.name, agent.version);
}
main().catch((err) => {
console.error("The sample encountered an error:", err);
});
O que esse código faz
Este exemplo de TypeScript cria um agente com uma ferramenta OpenAPI para dados meteorológicos usando autenticação anônima. Ao executar o código:
- Ele carrega a especificação openAPI do tempo de um arquivo JSON local.
- Cria um agente com a ferramenta meteorológica configurada.
- Envia uma solicitação de streaming perguntando sobre o clima e o planejamento de roupas de Seattle.
- Processa a resposta de streaming e exibe deltas à medida que chegam.
- Ele força o uso de ferramentas usando
tool_choice: "required"para garantir que a API seja chamada. - Limpa excluindo o agente.
Entradas necessárias
- Valor da string embutida:
PROJECT_ENDPOINT(ponto de extremidade do projeto Foundry) - Arquivo local:
../assets/weather_openapi.json(especificação OpenAPI)
Saída esperada
Loading OpenAPI specifications from assets directory...
Creating agent with OpenAPI tool...
Agent created (id: asst_abc123, name: MyOpenApiAgent, version: 1)
Sending request to OpenAPI-enabled agent with streaming...
Follow-up response created with ID: resp_xyz789
The weather in Seattle is currently...
Tool call completed: get_weather
Follow-up completed!
Cleaning up resources...
Agent deleted
OpenAPI agent sample completed!
Erros comuns
-
Error: OpenAPI specification not found: caminho de arquivo incorreto ou arquivo ausente -
AuthenticationError: credenciais de Azure inválidas -
A chave de API não está funcionando: se você alternar de anônimo para autenticação de chave de API, verifique se sua especificação OpenAPI está
securitySchemesconfigurada esecurityconfigurada corretamente
Criar um agente que usa ferramentas OpenAPI autenticadas com uma conexão de projeto
O exemplo de código TypeScript a seguir demonstra como criar um agente de IA que usa ferramentas OpenAPI autenticadas por meio de uma conexão de projeto. O agente carrega a especificação OpenAPI do TripAdvisor de ativos locais e pode invocar a API por meio da conexão de projeto configurada. Para obter uma versão javaScript deste exemplo, consulte o sample no repositório SDK do Azure para JavaScript no GitHub.
import { DefaultAzureCredential } from "@azure/identity";
import {
AIProjectClient,
OpenApiTool,
OpenApiFunctionDefinition,
OpenApiProjectConnectionAuthDetails,
} from "@azure/ai-projects";
import * as fs from "fs";
import * as path from "path";
// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
const PROJECT_ENDPOINT = "your_project_endpoint";
const TRIPADVISOR_CONNECTION_ID = "your-tripadvisor-connection-id";
const tripAdvisorSpecPath = path.resolve(__dirname, "../assets", "tripadvisor_openapi.json");
function loadOpenApiSpec(specPath: string): unknown {
if (!fs.existsSync(specPath)) {
throw new Error(`OpenAPI specification not found at: ${specPath}`);
}
try {
const data = fs.readFileSync(specPath, "utf-8");
return JSON.parse(data);
} catch (error) {
throw new Error(`Failed to read or parse OpenAPI specification at ${specPath}: ${error}`);
}
}
function createTripAdvisorTool(spec: unknown): OpenApiTool {
const auth: OpenApiProjectConnectionAuthDetails = {
type: "project_connection",
security_scheme: {
project_connection_id: TRIPADVISOR_CONNECTION_ID,
},
};
const definition: OpenApiFunctionDefinition = {
name: "get_tripadvisor_location_details",
description:
"Fetch TripAdvisor location details, reviews, or photos using the Content API via project connection auth.",
spec,
auth,
};
return {
type: "openapi",
openapi: definition,
};
}
export async function main(): Promise<void> {
const tripAdvisorSpec = loadOpenApiSpec(tripAdvisorSpecPath);
// Create clients to call Foundry API
const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
const openai = project.getOpenAIClient();
// Create an agent with the OpenAPI project-connection tool
const agent = await project.agents.createVersion("MyOpenApiConnectionAgent", {
kind: "prompt",
model: "gpt-4.1-mini",
instructions:
"You are a travel assistant that consults the TripAdvisor Content API via project connection to answer user questions about locations.",
tools: [createTripAdvisorTool(tripAdvisorSpec)],
});
// Send a request and stream the response
const streamResponse = await openai.responses.create(
{
input:
"Provide a quick overview of the TripAdvisor location 293919 including its name, rating, and review count.",
stream: true,
},
{
body: {
agent: { name: agent.name, type: "agent_reference" },
tool_choice: "required",
},
},
);
// Process the streaming response
for await (const event of streamResponse) {
if (event.type === "response.output_text.delta") {
process.stdout.write(event.delta);
} else if (event.type === "response.output_text.done") {
console.log("\n");
}
}
// Clean up resources
await project.agents.deleteVersion(agent.name, agent.version);
}
main().catch((err) => {
console.error("The sample encountered an error:", err);
});
O que esse código faz
Este exemplo de TypeScript demonstra o uso de uma ferramenta OpenAPI com autenticação de chave de API por meio de uma conexão de projeto. Ao executar o código:
- Ele carrega a especificação OpenAPI do TripAdvisor de um arquivo local.
- Ele configura a autenticação usando a
TRIPADVISOR_CONNECTION_IDconstante. - Ele cria um agente com a ferramenta TripAdvisor que utiliza a conexão do projeto para facilitar a autenticação por chave de API.
- Ele envia uma solicitação de transmissão para obter detalhes de localização do TripAdvisor.
- Ele força o uso de ferramentas usando
tool_choice: "required"para garantir que a API seja chamada. - Ele processa e exibe a resposta de transmissão em tempo real.
- A limpeza é realizada ao excluir o agente.
Entradas necessárias
- Valores de cadeia de caracteres embutidas:
PROJECT_ENDPOINT,TRIPADVISOR_CONNECTION_ID - Arquivo local:
../assets/tripadvisor_openapi.json - Conexão do projeto configurada com a chave de API do TripAdvisor
Saída esperada
Loading TripAdvisor OpenAPI specification from assets directory...
Creating agent with OpenAPI project-connection tool...
Agent created (id: asst_abc123, name: MyOpenApiConnectionAgent, version: 1)
Sending request to TripAdvisor OpenAPI agent with streaming...
Follow-up response created with ID: resp_xyz789
Location 293919 is the Eiffel Tower in Paris, France. It has a rating of 4.5 stars with over 140,000 reviews...
Tool call completed: get_tripadvisor_location_details
Follow-up completed!
Cleaning up resources...
Agent deleted
TripAdvisor OpenAPI agent sample completed!
Erros comuns
-
Error: OpenAPI specification not found: verifique o caminho do arquivo. - Conexão não encontrada: verifique se
TRIPADVISOR_CONNECTION_IDestá correta e a conexão existe. -
AuthenticationException: chave de API inválida na conexão do projeto. -
Chave de API não injetada em solicitações: sua especificação OpenAPI deve incluir seções apropriadas em
securitySchemes(sobcomponents) esecurity. O nome da chave emsecuritySchemesdeve corresponder à chave na conexão do seu projeto. -
Content type is not supported: atualmente, somente esses dois tipos de conteúdo do corpo da solicitação têm suporte:application/jsoneapplication/json-patch+json. Os tipos de conteúdo de resposta não são restritos.
Considerações sobre segurança e dados
Quando você conecta um agente a uma ferramenta OpenAPI, o agente pode enviar parâmetros de solicitação derivados da entrada do usuário para a API de destino.
- Use conexões de projeto para segredos (chaves de API e tokens). Evite colocar segredos em um arquivo de especificação OpenAPI ou código-fonte.
- Examine quais dados a API recebe e o que ela retorna antes de usar a ferramenta em produção.
- Use acesso com privilégios mínimos. Para a identidade gerenciada, atribua apenas as funções que o serviço de destino exige.
Autenticar com a chave de API
Usando a autenticação de chave de API, você pode autenticar sua especificação OpenAPI usando vários métodos, como uma chave de API ou um token de portador. Você pode usar apenas um esquema de segurança de chave de API por especificação OpenAPI. Se você precisar de vários esquemas de segurança, crie várias ferramentas de especificação OpenAPI.
Atualize os esquemas de segurança de especificação do OpenAPI. Possui uma seção
securitySchemese um esquema do tipoapiKey. Por exemplo:"securitySchemes": { "apiKeyHeader": { "type": "apiKey", "name": "x-api-key", "in": "header" } }Normalmente, você só precisa atualizar o
namecampo, que corresponde ao nome dakeyconexão. Se os esquemas de segurança incluirem vários esquemas, mantenha apenas um deles.Atualize sua especificação OpenAPI para incluir uma
securityseção:"security": [ { "apiKeyHeader": [] } ]Remova qualquer parâmetro na especificação OpenAPI que precise da chave de API, pois a chave de API é armazenada e passada por uma conexão, conforme descrito posteriormente neste artigo.
Crie uma conexão para armazenar sua chave de API.
Vá para o portal do Foundry e abra seu projeto.
Crie ou selecione uma conexão que armazene o segredo. Consulte Adicionar uma nova conexão ao seu projeto.
Nota
Se você regenerar a chave de API em uma data posterior, precisará atualizar a conexão com a nova chave.
Insira as informações a seguir
chave:
namecampo do esquema de segurança. Neste exemplo, ele deve serx-api-key"securitySchemes": { "apiKeyHeader": { "type": "apiKey", "name": "x-api-key", "in": "header" } }value: YOUR_API_KEY
Depois de criar uma conexão, você pode usá-la por meio do SDK ou da API REST. Use as guias na parte superior deste artigo para ver exemplos de código.
Configurar uma conexão de token Bearer
Você pode usar a autenticação baseada em token (por exemplo, um token Bearer) com o mesmo project_connection tipo de autenticação usado para chaves de API. A principal diferença é como você configura a especificação OpenAPI e a conexão do projeto.
Sua especificação OpenAPI terá esta aparência:
BearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
Você precisa:
Atualize sua especificação
securitySchemesOpenAPI para usarAuthorizationcomo o nome do cabeçalho:"securitySchemes": { "bearerAuth": { "type": "apiKey", "name": "Authorization", "in": "header" } }Adicione uma
securityseção que faça referência ao esquema:"security": [ { "bearerAuth": [] } ]Crie uma conexão de chaves personalizadas em seu projeto do Foundry:
- Vá para o portal do Foundry e abra seu projeto.
- Crie ou selecione uma conexão que armazene o segredo. Consulte Adicionar uma nova conexão ao seu projeto.
- Insira os seguintes valores:
-
chave:
Authorization(deve corresponder aonamecampo em seusecuritySchemes) -
valor:
Bearer <token>(substitua<token>pelo token real)
-
chave:
Importante
O valor deve incluir a palavra
Bearerseguida por um espaço antes do token. Por exemplo:Bearer eyJhbGciOiJSUzI1NiIs.... Se você omitirBearer, a API receberá um token bruto sem o prefixo do esquema de autorização necessário e a solicitação falhará.Depois de criar a conexão, use-a com o
project_connectiontipo de autenticação em seu código, da mesma maneira que faria com a autenticação por chave de API. A ID de conexão usa o mesmo formato:/subscriptions/{{subscriptionID}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.CognitiveServices/accounts/{{foundryAccountName}}/projects/{{foundryProjectName}}/connections/{{foundryConnectionName}}.
Autenticar usando a identidade gerenciada (Microsoft Entra ID)
Microsoft Entra ID é um serviço de gerenciamento de acesso e identidade baseado em nuvem que seus funcionários podem usar para acessar recursos externos. Usando Microsoft Entra ID, você pode adicionar segurança extra às SUAS APIs sem precisar usar chaves de API. Quando você configura a autenticação de identidade gerenciada, o agente é autenticado por meio da ferramenta Foundry que ele usa.
Importante
A autenticação de identidade gerenciada só funciona quando o serviço de destino aceita tokens Microsoft Entra ID. Se a API de destino usar um esquema de autenticação personalizado que não dá suporte ao Microsoft Entra ID, use autenticação por chave de API ou token de portador.
Entender o URI do público-alvo
O audience (às vezes chamado resource identifier ou Application ID URI) informa Microsoft Entra ID qual serviço ou API o token se destina a acessar. O valor de audiência deve corresponder ao que o serviço de destino espera ou a autenticação falha com um erro 401.
Nota
O público-alvo não é o endpoint do projeto do Foundry. É o identificador de recurso do serviço de destino que sua ferramenta OpenAPI chama.
A tabela a seguir lista URIs de audiência para serviços comuns de Azure:
| Serviço alvo | URI do público-alvo |
|---|---|
| Armazenamento do Azure | https://storage.azure.com |
| Azure Key Vault | https://vault.azure.net |
| Pesquisa de IA do Azure | https://search.azure.com |
| Aplicativo Lógico do Azure | https://logic.azure.com |
| Gerenciamento de API do Azure (plano de gerenciamento) | https://management.azure.com |
| API protegida por um registro de aplicativo Microsoft Entra (incluindo APIM com OAuth) | O URI de ID do aplicativo do registro do aplicativo (por exemplo, api://<client-id>) |
Dica
Se você usar Gerenciamento de API do Azure para proteger uma API personalizada com uma política de validação do OAuth 2.0, o público-alvo será o URI de ID Application do registro do aplicativo que protege a API — não https://management.azure.com. O público do plano de gerenciamento só se aplica a operações de Azure Resource Manager no próprio recurso APIM.
Para obter mais informações sobre como os agentes se autenticam com Microsoft Entra ID, consulte Agent identity and authentication.
Localizar e verificar seu público-alvo
Use as seguintes etapas para determinar e verificar o valor correto do público-alvo:
- Para serviços de Azure: verifique a documentação do serviço quanto ao identificador de recurso Microsoft Entra ID. A maioria dos serviços Azure lista o URI de audiência na documentação de autenticação.
- Para APIs protegidas por um registro de aplicativo Microsoft Entra: no portal Azure, vá para Microsoft Entra ID>Registros de aplicativo> selecione seu aplicativo >Expose uma API. O URI da ID do Aplicativo na parte superior da página é o valor de audiência.
-
Para verificar o público-alvo de um token: decodificar o token https://jwt.ms de acesso e verificar a
auddeclaração. Oaudvalor deve corresponder ao público-alvo esperado pelo serviço de destino.
Configurar a autenticação de identidade gerenciada
Para configurar a autenticação usando a Identidade Gerenciada:
Verifique se o recurso Foundry tem a identidade gerenciada atribuída pelo sistema habilitada.
Crie um recurso para o serviço ao qual você deseja se conectar por meio da especificação OpenAPI.
Atribua acesso adequado ao recurso.
Selecione Controle de Acesso para o recurso.
Selecione Adicionar e, em seguida, adicione a atribuição de função na parte superior da tela.
Selecione a atribuição de função adequada necessária, geralmente ela requer pelo menos a função READER . Em seguida, selecione Avançar.
Selecione Identidade Gerenciada e selecione membros.
No menu suspenso de identidade gerenciada, pesquise a Conta Foundry e, em seguida, selecione a conta Foundry do seu agente.
Selecione Concluir.
Ao concluir a instalação, você pode continuar usando a ferramenta por meio do portal do Foundry, do SDK ou da API REST. Use as guias na parte superior deste artigo para ver exemplos de código.
Solucionar problemas de erros comuns
| Sintoma | Causa provável | Resolução |
|---|---|---|
| A chave de API não está incluída nas solicitações. | Especificação OpenAPI está faltando as seções securitySchemes ou security. |
Verifique se sua especificação OpenAPI inclui ambas as seções components.securitySchemes e uma seção de nível superior security. Verifique se o esquema name corresponde ao nome da chave na conexão do projeto. |
| O agente não chama a ferramenta OpenAPI. | Opção de ferramenta não definida ou operationId não descritiva. |
Use tool_choice="required" para forçar a invocação da ferramenta. Verifique se operationId os valores são descritivos para que o modelo possa escolher a operação certa. |
| Falha na autenticação para identidade gerenciada. | Identidade gerenciada não habilitada ou atribuição de função ausente. | Habilite a identidade gerenciada atribuída pelo sistema no recurso Foundry. Atribua a função necessária (Leitor ou superior) no serviço de destino. |
| A identidade gerenciada retorna 401 mesmo que a função seja atribuída. | O URI de audiência não corresponde ao que o serviço de destino espera. | Verifique se o URI do público-alvo corresponde ao identificador de recurso do serviço de destino. Para serviços de Azure, verifique a documentação do serviço. Para APIs protegidas por Microsoft Entra, use o URI da ID do aplicativo do registro do aplicativo. Decodificar o token em https://jwt.ms e confirmar que a reivindicação de aud corresponde. Consulte Noções básicas sobre o URI do público-alvo. |
| Token de identidade gerenciada rejeitado pela API de destino. | O serviço de destino não aceita tokens de Microsoft Entra ID. | Confirme se o serviço de destino dá suporte à autenticação Microsoft Entra ID. Caso contrário, use a chave de API ou a autenticação por token Bearer. |
| A solicitação falha com 400 Solicitações Incorretas. | A especificação OpenAPI não corresponde à API real. | Valide sua especificação OpenAPI em relação à API real. Verifique os nomes de parâmetros, os tipos e os campos necessários. |
| A solicitação falha com o 401 Não autorizado. | Chave de API ou token inválido ou expirado. | Regenerar a chave/token da API e atualizar a conexão do projeto. Verifique se a ID da conexão está correta. |
| A ferramenta retorna um formato de resposta inesperado. | Esquema de resposta não definido na especificação OpenAPI. | Adicione esquemas de resposta à especificação OpenAPI para melhor compreensão do modelo. |
operationId erro de validação. |
Caracteres inválidos em operationId. |
Use apenas letras, -, e _ nos valores de operationId. Remova números e caracteres especiais. |
| Erro: Conexão não encontrada. | Incompatibilidade de ID ou nome da conexão. | Verifique se OPENAPI_PROJECT_CONNECTION_NAME corresponde ao nome da conexão em seu projeto Foundry. |
| O token de portador não foi enviado corretamente. | O valor da conexão está sem o prefixo Bearer . |
Defina o valor da conexão para Bearer <token> (com a palavra Bearer e um espaço antes do token). Verifique se a especificação securitySchemes OpenAPI usa "name": "Authorization". |
Escolher um método de autenticação
A tabela a seguir ajuda você a escolher o método de autenticação correto para sua ferramenta OpenAPI:
| Método de autenticação | Melhor para | Complexidade da instalação |
|---|---|---|
| Anônimo | APIs públicas sem autenticação | Baixo |
| chave de API | APIs não Microsoft com acesso baseado em chave | Médio |
| Identidade gerenciada | serviços do Azure e APIs protegidas pelo Microsoft Entra ID. Requer que o serviço de destino aceite tokens de Microsoft Entra ID e suporte Azure RBAC ou controle de acesso baseado em Microsoft Entra. | Médio-Alto |
