# Проверка подлинности

SDK GitHub Copilot поддерживает несколько методов аутентификации для различных сценариев использования. Выберите метод, который лучше всего соответствует вашему сценарию развертывания.

<!-- markdownlint-disable GHD046 GHD005 -->

<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->

## Методы аутентификации

| Метод                                                                                                | Вариант использования                                                            | Требуется подписка на Copilot                             |
| ---------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | --------------------------------------------------------- |
| [GitHub Авторизованный пользователь](#github-signed-in-user)                                         | Интерактивные приложения, в которые пользователи входят через GitHub             | Yes                                                       |
| [GitHub приложение OAuth](#github-oauth-app)                                                         | Приложения, действующие от имени пользователей через OAuth                       | Yes                                                       |
| [Переменные среды](#environment-variables)                                                           | CI/CD, автоматизация, сервер-сервер                                              | Yes                                                       |
| [Проверка подлинности между серверами](/ru/copilot/how-tos/copilot-sdk/auth/server-to-server-tokens) | Автоматизация с учетом организации и прямое выставление счетов организации       | Нет подписки пользователя; Требуется политика организации |
| [БЁК (принеси свой ключ)](/ru/copilot/how-tos/copilot-sdk/auth/byok)                                 | Использование собственных ключей API (Microsoft Foundry, OpenAI и многое другое) | Нет                                                       |

## Пользователь GitHub, вошедший в систему

Это стандартный метод аутентификации при интерактивном запуске Copilot CLI. Пользователи аутентифицируются через поток устройств GitHub OAuth, а SDK использует их сохранённые учетные данные.

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

1. Пользователь запускает CLI `copilot` и входит через GitHub OAuth
2. Учетные данные надёжно хранятся в системном ключе
3. SDK автоматически использует сохранённые учетные данные

**Конфигурация SDK:**

<div class="ghd-codetabs">
<div class="ghd-codetab" data-lang="dotnet" data-label=".NET"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">.NET</div>

```csharp
using GitHub.Copilot;

// Default: uses logged-in user credentials
await using CopilotClient client = new();
```

</div>

<div class="ghd-codetab" data-lang="go" data-label="Go"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Go</div>

```golang
import copilot "github.com/github/copilot-sdk/go"

// Default: uses logged-in user credentials
client := copilot.NewClient(nil)
```

</div>

<div class="ghd-codetab" data-lang="java" data-label="Java"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Java</div>

```java
import com.github.copilot.CopilotClient;

// Default: uses logged-in user credentials
var client = new CopilotClient();
client.start().get();
```

</div>

<div class="ghd-codetab" data-lang="python" data-label="Python"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Python</div>

```python
from copilot import CopilotClient

# Default: uses logged-in user credentials
client = CopilotClient()
await client.start()
```

</div>

<div class="ghd-codetab" data-lang="rust" data-label="Rust"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Rust</div>

```rust
use github_copilot_sdk::{Client, ClientOptions};

// Default: uses logged-in user credentials
let client = Client::start(ClientOptions::default()).await?;
```

</div>

<div class="ghd-codetab" data-lang="typescript" data-label="TypeScript"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">TypeScript</div>

```typescript
import { CopilotClient } from "@github/copilot-sdk";

// Default: uses logged-in user credentials
const client = new CopilotClient();
```

</div>

</div>

**Когда использовать:**

* Настольные приложения, где пользователи взаимодействуют напрямую
* среды для разработки и тестирования;
* Любой сценарий, когда пользователь может войти интерактивно

## GitHub приложение OAuth

Используйте приложение OAuth GitHub для аутентификации пользователей через ваше приложение и передачи их учетных данных SDK. Это позволяет вашему приложению делать запросы на Copilot API от имени пользователей, которые авторизируют ваше приложение.

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

1. Пользователь авторизирует ваше приложение OAuth GitHub
2. Ваше приложение получает пользовательский токен доступа (`gho_` или `ghu_` префикс)
3. Передача маркера в пакет SDK через конфигурацию клиента

**Конфигурация SDK:**

<div class="ghd-codetabs">
<div class="ghd-codetab" data-lang="dotnet" data-label=".NET"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">.NET</div>

```csharp
using GitHub.Copilot;

await using var client = new CopilotClient(new CopilotClientOptions
{
    GitHubToken = userAccessToken,     // Token from OAuth flow
    UseLoggedInUser = false,           // Don't use stored CLI credentials
});
```

</div>

<div class="ghd-codetab" data-lang="go" data-label="Go"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Go</div>

```golang
import copilot "github.com/github/copilot-sdk/go"

client := copilot.NewClient(&copilot.ClientOptions{
    GitHubToken:       userAccessToken,      // Token from OAuth flow
    UseLoggedInUser:   copilot.Bool(false),  // Don't use stored CLI credentials
})
```

</div>

<div class="ghd-codetab" data-lang="java" data-label="Java"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Java</div>

<!-- docs-validate: skip -->

```java
import com.github.copilot.CopilotClient;
import com.github.copilot.rpc.*;

var client = new CopilotClient(new CopilotClientOptions()
    .setGitHubToken(userAccessToken)  // Token from OAuth flow
    .setUseLoggedInUser(false)        // Don't use stored CLI credentials
);
client.start().get();
```

</div>

<div class="ghd-codetab" data-lang="python" data-label="Python"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Python</div>

```python
from copilot import CopilotClient

client = CopilotClient({
    "github_token": user_access_token,  # Token from OAuth flow
    "use_logged_in_user": False,        # Don't use stored CLI credentials
})
await client.start()
```

</div>

<div class="ghd-codetab" data-lang="rust" data-label="Rust"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Rust</div>

```rust
use github_copilot_sdk::{Client, ClientOptions};

let client = Client::start(
    ClientOptions::default()
        .with_github_token(user_access_token)
        .with_use_logged_in_user(false),
).await?;
```

</div>

<div class="ghd-codetab" data-lang="typescript" data-label="TypeScript"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">TypeScript</div>

```typescript
import { CopilotClient } from "@github/copilot-sdk";

const client = new CopilotClient({
    gitHubToken: userAccessToken,  // Token from OAuth flow
    useLoggedInUser: false,        // Don't use stored CLI credentials
});
```

</div>

</div>

**Поддерживаемые типы токенов:**

* `gho_` - Токены доступа пользователей OAuth
* `ghu_` - GitHub Токены доступа пользователей приложения
* `github_pat_` - Детализированные персональные токены доступа

**Не поддерживаются:**

* `ghp_` - Классические личные токены доступа (устарели)

**Когда использовать:**

* Веб-приложения, в которых пользователи входят через GitHub
* SaaS-приложения, построенные поверх Copilot
* Любое многопользовательское приложение, где нужно делать запросы от имени разных пользователей

Дополнительные сведения см. в разделе [Настройка GitHub OAuth](/ru/copilot/how-tos/copilot-sdk/setup/github-oauth).

## Переменные среды

Для автоматизации, CI/CD конвейеров и сценариев сервер-сервер можно аутентифицировать с помощью переменных среды.

Сведения об автоматизации с атрибутами организации, которая не должна использовать личный маркер доступа пользователя, см. в разделе [Проверка подлинности между серверами](/ru/copilot/how-tos/copilot-sdk/auth/server-to-server-tokens).

**Поддерживаемые переменные среды (в порядке приоритета):**

1. `COPILOT_GITHUB_TOKEN` — рекомендуется для явного Copilot использования
2. `GH_TOKEN` — совместим с GitHub CLI
3. `GITHUB_TOKEN` - GitHub Actions совместим

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

1. Установите одну из поддерживаемых переменных среды с действительным токеном
2. SDK автоматически обнаруживает и использует токен

**Конфигурация SDK:**

Изменения кода не требуются — SDK автоматически обнаруживает переменные среды:

<div class="ghd-codetabs">
<div class="ghd-codetab" data-lang="dotnet" data-label=".NET"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">.NET</div>

```csharp
using GitHub.Copilot;

// Token is read from environment variable automatically
await using CopilotClient client = new();
```

</div>

<div class="ghd-codetab" data-lang="go" data-label="Go"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Go</div>

```golang
import copilot "github.com/github/copilot-sdk/go"

// Token is read from environment variable automatically
client := copilot.NewClient(nil)
```

</div>

<div class="ghd-codetab" data-lang="java" data-label="Java"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Java</div>

```java
import com.github.copilot.CopilotClient;

// Token is read from environment variable automatically
var client = new CopilotClient();
client.start().get();
```

</div>

<div class="ghd-codetab" data-lang="python" data-label="Python"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Python</div>

```python
from copilot import CopilotClient

# Token is read from environment variable automatically
client = CopilotClient()
await client.start()
```

</div>

<div class="ghd-codetab" data-lang="rust" data-label="Rust"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Rust</div>

```rust
use github_copilot_sdk::{Client, ClientOptions};

// Token is read from environment variable automatically
let client = Client::start(ClientOptions::default()).await?;
```

</div>

<div class="ghd-codetab" data-lang="typescript" data-label="TypeScript"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">TypeScript</div>

```typescript
import { CopilotClient } from "@github/copilot-sdk";

// Token is read from environment variable automatically
const client = new CopilotClient();
```

</div>

</div>

**Когда использовать:**

* Конвейеры CI/CD (GitHub Actions, Jenkins и многое другое)
* Автоматическое тестирование
* Серверные приложения с сервисными аккаунтами
* Разработка, когда вы не хотите использовать интерактивный вход

## БЁК (принеси свой ключ)

BYOK позволяет использовать собственные ключи API от поставщиков моделей, таких как Microsoft Foundry, OpenAI или Anthropic. Это полностью обходит аутентификацию GitHub Copilot.

**Ключевые преимущества:**

* Не требуется подписка на GitHub Copilot
* Использование корпоративных моделей
* Прямое выставление счетов у вашего поставщика модели
* Поддержка конечных точек, совместимых Microsoft Foundry, OpenAI, Anthropic и OpenAI

**Полная информация см. [БЁК (принеси свой ключ)](/ru/copilot/how-tos/copilot-sdk/auth/byok)**, включая:

* настройка Microsoft Foundry
* Параметры конфигурации поставщика
* Ограничения и рекомендации
* Полные примеры кода

## Приоритет аутентификации

Когда доступно несколько методов аутентификации, SDK использует их в следующем порядке приоритета:

1. **Явно `gitHubToken`** - Токен передаётся напрямую клиенту SDK или конфигурации сессии
2. **Токен прямого API** - `GITHUB_COPILOT_API_TOKEN` с `COPILOT_API_URL`
3. Токены \*\*\*\* - `COPILOT_GITHUB_TOKEN` → `GH_TOKEN` →`GITHUB_TOKEN`
4. **Сохранённые учетные данные OAuth** — из предыдущего `copilot` входа в CLI
5. **GitHub CLI** - `gh auth` квалификации

Для многопользовательского серверного режима передайте сессионный `gitHubToken`, чтобы каждая сессия проходила с правильной идентичностью GitHub; см. [Мультиарендные и серверные развертывания](/ru/copilot/how-tos/copilot-sdk/setup/multi-tenancy).

## Отключение автовхода

Чтобы предотвратить автоматическое использование хранимых учетных данных или `gh` проверки подлинности интерфейса командной строки пакета SDK, настройте его для отключения резервного восстановления, вошедшего в систему:

<div class="ghd-codetabs">
<div class="ghd-codetab" data-lang="dotnet" data-label=".NET"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">.NET</div>

```csharp
await using var client = new CopilotClient(new CopilotClientOptions
{
    UseLoggedInUser = false,  // Only use explicit tokens
});
```

</div>

<div class="ghd-codetab" data-lang="go" data-label="Go"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Go</div>

```golang
client := copilot.NewClient(&copilot.ClientOptions{
    UseLoggedInUser: copilot.Bool(false),  // Only use explicit tokens
})
```

</div>

<div class="ghd-codetab" data-lang="java" data-label="Java"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Java</div>

```java
import com.github.copilot.CopilotClient;
import com.github.copilot.rpc.*;

var client = new CopilotClient(new CopilotClientOptions()
    .setUseLoggedInUser(false)  // Only use explicit tokens
);
client.start().get();
```

</div>

<div class="ghd-codetab" data-lang="python" data-label="Python"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Python</div>

```python
client = CopilotClient({
    "use_logged_in_user": False,  # Only use explicit tokens
})
```

</div>

<div class="ghd-codetab" data-lang="rust" data-label="Rust"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Rust</div>

```rust
use github_copilot_sdk::{Client, ClientOptions};

let client = Client::start(
    ClientOptions::default().with_use_logged_in_user(false),
).await?;
```

</div>

<div class="ghd-codetab" data-lang="typescript" data-label="TypeScript"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">TypeScript</div>

```typescript
const client = new CopilotClient({
    useLoggedInUser: false,  // Only use explicit tokens
});
```

</div>

</div>

## Дальнейшие действия

* [БЁК (принеси свой ключ)](/ru/copilot/how-tos/copilot-sdk/auth/byok) — Научитесь использовать свои собственные API-ключи
* [Создайте своё первое приложение на базе Copilot](/ru/copilot/how-tos/copilot-sdk/getting-started) — Создайте своё первое приложение на базе Copilot
* [Использование MCP-серверов с SDK GitHub Copilot](/ru/copilot/how-tos/copilot-sdk/features/mcp) — Подключение к внешним инструментам