Skip to main content
Select language: current language is Russian
Поиск или запрос Copilot
Открыть меню

Использование Azure Managed Identity с Copilot SDK

Используйте Azure Managed Identity (Entra ID) для аутентификации GitHub Copilot SDK с использованием Azure AI Foundry моделей вместо статических API-ключей.

Кто может использовать эту функцию?

GitHub Copilot SDK Доступна со всеми Copilot тарифными планами.

Примечание.

          Второй пилот SDK в настоящее время находится в Technical Preview. Функциональность и доступность могут меняться.

Поскольку развертывания Azure часто используют управляемую идентичность (Entra ID) вместо долгоживущих ключей, для использования режима Второй пилот SDKBYOK в . Поскольку SDK не поддерживает нативную аутентификацию Entra ID, вы можете использовать кратковременный токен носителя через поле токена носителя в конфигурации провайдера (bearer_token на Python, bearerToken в Node.js / TypeScript и .NET).

В этом руководстве показано, как использовать DefaultAzureCredential из библиотеки Azure Identity аутентификацию с помощью Azure AI Foundry моделей через Второй пилот SDK.

Принцип работы

Совместимая с OpenAI конечная точка Azure AI Foundry принимает носитель-токены из Entra ID вместо статических API-ключей. Шаблон:

  1. Используйте DefaultAzureCredential для получения токена для https://cognitiveservices.azure.com/.default области объёма.
  2. Передайте токен с помощью поля токена носителя в конфигурации провайдера BYOK (bearer_token на Python, bearerToken в Node.js / TypeScript и .NET).
  3. Обновите токен до истечения срока действия. Токены обычно действительны около одного часа.

Диаграмма, показывающая процесс аутентификации для Azure Managed Identity с помощью Copilot SDK.

Необходимые условия

  • Подписка Azure с развернутым ресурсом Azure AI Foundry.
  • Установлена библиотека Azure Identity (azure-identity для Python, @azure/identity для Node.jsили Azure.Identity для .NET).
  •         Второй пилот SDK установлен. Дополнительные сведения см. в разделе [AUTOTITLE](/copilot/how-tos/copilot-sdk/sdk-getting-started).
    

Пример Python

Установка зависимостей

pip install github-copilot-sdk azure-identity

Основное использование

import asyncio
import os

from azure.identity import DefaultAzureCredential
from copilot import CopilotClient, PermissionHandler

COGNITIVE_SERVICES_SCOPE = "https://cognitiveservices.azure.com/.default"

async def main():
    # Get a token using Managed Identity, Azure CLI, or other credential chain
    credential = DefaultAzureCredential()
    token = credential.get_token(COGNITIVE_SERVICES_SCOPE).token

    foundry_url = os.environ["AZURE_AI_FOUNDRY_RESOURCE_URL"]

    client = CopilotClient()
    await client.start()

    session = await client.create_session(
        on_permission_request=PermissionHandler.approve_all,
        model="gpt-4.1",
        provider={
            "type": "openai",
            "base_url": f"{foundry_url.rstrip('/')}/openai/v1/",
            "bearer_token": token,  # Short-lived bearer token
            "wire_api": "responses",
        },
    )

    response = await session.send_and_wait({"prompt": "Hello from Managed Identity!"})
    print(response.data.content)

    await client.stop()

asyncio.run(main())

Замените AZURE_AI_FOUNDRY_RESOURCE_URL на переменную окружения, содержащую URL ресурса Azure AI Foundry (например, https://myresource.openai.azure.com).

Обновление токена для долгосрочных приложений

Жетоны предъявителя истекают примерно через час. Для серверов или долгоработающих агентов обновляйте токен перед созданием каждой сессии:

from azure.identity import DefaultAzureCredential
from copilot import CopilotClient, PermissionHandler

COGNITIVE_SERVICES_SCOPE = "https://cognitiveservices.azure.com/.default"

class ManagedIdentityCopilotAgent:
    """Copilot agent that refreshes Entra ID tokens for Azure AI Foundry."""

    def __init__(self, foundry_url: str, model: str = "gpt-4.1"):
        self.foundry_url = foundry_url.rstrip("/")
        self.model = model
        self.credential = DefaultAzureCredential()
        self.client = CopilotClient()

    def _get_provider_config(self) -> dict:
        """Build a provider config dict with a fresh bearer token."""
        token = self.credential.get_token(COGNITIVE_SERVICES_SCOPE).token
        return {
            "type": "openai",
            "base_url": f"{self.foundry_url}/openai/v1/",
            "bearer_token": token,
            "wire_api": "responses",
        }

    async def chat(self, prompt: str) -> str:
        """Send a prompt and return the response text."""
        # Fresh token for each session
        provider = self._get_provider_config()
        session = await self.client.create_session(
            on_permission_request=PermissionHandler.approve_all,
            model=self.model,
            provider=provider,
        )

        response = await session.send_and_wait({"prompt": prompt})
        await session.disconnect()

        return response.data.content if response else ""

Node.js / пример TypeScript

import { DefaultAzureCredential } from "@azure/identity";
import { CopilotClient } from "@github/copilot-sdk";

const credential = new DefaultAzureCredential();
const tokenResponse = await credential.getToken(
    "https://cognitiveservices.azure.com/.default"
);

const client = new CopilotClient();

const session = await client.createSession({
    model: "gpt-4.1",
    provider: {
        type: "openai",
        baseUrl: `${process.env.AZURE_AI_FOUNDRY_RESOURCE_URL}/openai/v1/`,
        bearerToken: tokenResponse.token,
        wireApi: "responses",
    },
});

const response = await session.sendAndWait({ prompt: "Hello!" });
console.log(response?.data.content);

await client.stop();

Пример .NET

using Azure.Identity;
using GitHub.Copilot;

var credential = new DefaultAzureCredential();
var token = await credential.GetTokenAsync(
    new Azure.Core.TokenRequestContext(
        new[] { "https://cognitiveservices.azure.com/.default" }));

await using var client = new CopilotClient();
var foundryUrl = Environment.GetEnvironmentVariable("AZURE_AI_FOUNDRY_RESOURCE_URL");

await using var session = await client.CreateSessionAsync(new SessionConfig
{
    Model = "gpt-4.1",
    Provider = new ProviderConfig
    {
        Type = "openai",
        BaseUrl = $"{foundryUrl!.TrimEnd('/')}/openai/v1/",
        BearerToken = token.Token,
        WireApi = "responses",
    },
});

var response = await session.SendAndWaitAsync(
    new MessageOptions { Prompt = "Hello from Managed Identity!" });
Console.WriteLine(response?.Data.Content);

Конфигурация среды

Требуется следующая переменная среды:

VariableОписаниеПример
AZURE_AI_FOUNDRY_RESOURCE_URLURL ресурса Azure AI Foundryhttps://myresource.openai.azure.com

Не требуется переменная окружения ключа API — аутентификация осуществляется DefaultAzureCredentialс помощью , который автоматически поддерживает:

  •         **Управляемая идентичность** (системная или пользовательская) для приложений, размещённых на Azure.
    
  •         **Azure CLI** (`az login`) для локальной разработки.
    
  •         **Переменные среды** (`AZURE_CLIENT_ID`, `AZURE_TENANT_ID`, `AZURE_CLIENT_SECRET`) для принципов сервисов.
    
  •         **Идентификация рабочей** нагрузки для Kubernetes.
    

Полная цепочка учетных данных см. документацию DefaultAzureCredential.

Когда следует использовать этот шаблон

СценарийRecommendation
Azure-хостируемое приложение с управляемой идентичностьюИспользуйте этот узор.
App with existing Azure AD service principalИспользуйте этот узор.
Местное развитие с az loginИспользуйте этот узор.
Не-Azure среда со статическим API-ключомИспользуйте стандартный BYOK. Для получения дополнительной информации смотрите BYOK в github/copilot-sdk репозитории.
          GitHub Copilot Доступна подписка | Используйте GitHub OAuth. Для получения дополнительной информации смотрите [GitHub OAuth](https://github.com/github/copilot-sdk/blob/main/docs/setup/github-oauth.md) в `github/copilot-sdk` репозитории. |

Дополнительные материалы

Morty Proxy This is a proxified and sanitized view of the page, visit original site.