# Server-zu-Server-Authentifizierung

Verwenden Sie ein kurzlebiges Installationszugriffstoken, wenn ein Dienst Copilot Anforderungen im Namen einer Organisation ohne Anmeldeinformationen eines Benutzers vornehmen muss. Verwenden Sie in GitHub Actions stattdessen die integrierte GITHUB_TOKEN Datei.

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

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

## GitHub Actions

Erteilen Sie für Workflows in einem organisationseigenen Repository die integrierte Tokenberechtigung, um Copilot Anforderungen zu stellen:

```yaml
permissions:
  contents: read
  copilot-requests: write

jobs:
  copilot:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - run: your-application
        env:
          GITHUB_TOKEN: $
```

Die **zulassungsfähige Verwendung von Copilot CLI, die der Organisationsrichtlinie in Rechnung gestellt** wird, muss aktiviert sein. Dieser Ansatz benötigt keinen GitHub App- oder gespeicherten Authentifizierungsschlüssel. Ausführliche Informationen findest du unter [Verwenden von Copilot CLI in GitHub Actions mit GITHUB\_TOKEN](/de/copilot/how-tos/copilot-cli/use-copilot-cli-in-actions).

## Andere Dienstleistungen und CI-Systeme

Für Dienste außerhalb GitHub Actions:

1. Erstellen Sie eine GitHub App mit der <c0>Copilot</c0> Anforderungs-Repositoryberechtigung auf <c1>Lese-& Schreibzugriff</c1>.

2. Installieren Sie sie in der Organisation, die in Rechnung gestellt werden soll. Die aktuelle Copilot Berechtigungsprüfung erfordert Zugriff auf **alle Repositorys**.

3. [Generieren eines Installationszugriffstokens für eine GitHub App](/de/apps/creating-github-apps/authenticating-with-a-github-app/generating-an-installation-access-token-for-a-github-app) mit einer Repository-ID und der Copilot Berechtigung:

   ```json
   {
     "repository_ids": [123456789],
     "permissions": {
       "copilot_requests": "write"
     }
   }
   ```

4. Übergeben Sie das resultierende `ghs_` Token an die Laufzeit als `COPILOT_GITHUB_TOKEN`.

Die Organisation muss für Copilot Anforderungen von GitHub App-Installationen aktiviert sein. Installationstoken laufen nach einer Stunde ab.

> \[!WARNING]
> Übergeben Sie kein Installationstoken über die `gitHubToken`Sdk-Option oder `github_token`die entsprechende Option. Diese Option gilt für Benutzertoken. Installationstoken müssen den Authentifizierungspfad der Laufzeitumgebung verwenden.

## Konfigurieren der Runtime

In den folgenden Beispielen wird davon ausgegangen, dass das geprägte Token in `INSTALLATION_TOKEN`ist. Sie übergeben es nur an die untergeordnete Laufzeit und deaktivieren Fallback auf gespeicherte Benutzeranmeldeinformationen.

<div class="ghd-codetabs">
<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, RuntimeConnection } from "@github/copilot-sdk";

const token = process.env.INSTALLATION_TOKEN;
if (!token) throw new Error("INSTALLATION_TOKEN is required");

const client = new CopilotClient({
    connection: RuntimeConnection.forStdio(),
    env: {
        ...process.env,
        COPILOT_GITHUB_TOKEN: token,
    },
    useLoggedInUser: false,
});
```

</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
import os

from copilot import CopilotClient, RuntimeConnection

client = CopilotClient(
    connection=RuntimeConnection.for_stdio(),
    env={**os.environ, "COPILOT_GITHUB_TOKEN": os.environ["INSTALLATION_TOKEN"]},
    use_logged_in_user=False,
)
```

</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
package main

import (
    "log"
    "os"

    copilot "github.com/github/copilot-sdk/go"
)

func main() {
    token, ok := os.LookupEnv("INSTALLATION_TOKEN")
    if !ok {
        log.Fatal("INSTALLATION_TOKEN is required")
    }
    client := copilot.NewClient(&copilot.ClientOptions{
        Connection:      copilot.StdioConnection{},
        Env:             append(os.Environ(), "COPILOT_GITHUB_TOKEN="+token),
        UseLoggedInUser: copilot.Bool(false),
    })
    _ = client
}
```

</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::{ClientOptions, Transport};

fn main() {
    let token = std::env::var("INSTALLATION_TOKEN").expect("INSTALLATION_TOKEN is required");
    let options = ClientOptions::new()
        .with_transport(Transport::Stdio)
        .with_env([("COPILOT_GITHUB_TOKEN", token)])
        .with_use_logged_in_user(false);
    drop(options);
}
```

</div>

<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 System.Collections;
using GitHub.Copilot;

var token = Environment.GetEnvironmentVariable("INSTALLATION_TOKEN")
    ?? throw new InvalidOperationException("INSTALLATION_TOKEN is required");
var environment = Environment.GetEnvironmentVariables()
    .Cast<DictionaryEntry>()
    .ToDictionary(entry => (string)entry.Key, entry => entry.Value?.ToString() ?? "");
environment["COPILOT_GITHUB_TOKEN"] = token;

await using var client = new CopilotClient(new CopilotClientOptions
{
    Connection = RuntimeConnection.ForStdio(),
    Environment = environment,
    UseLoggedInUser = false,
});
```

</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.CopilotClientOptions;
import java.util.HashMap;
import java.util.Objects;

var environment = new HashMap<>(System.getenv());
var token = Objects.requireNonNull(
    System.getenv("INSTALLATION_TOKEN"), "INSTALLATION_TOKEN is required");
environment.put("COPILOT_GITHUB_TOKEN", token);

try (var client = new CopilotClient(new CopilotClientOptions()
        .setEnvironment(environment)
        .setUseLoggedInUser(false))) {
    // Use the client.
}
```

</div>

</div>

Legen Sie für prozessinterne FFI in der Hostumgebung vor dem Laden der Laufzeit fest `COPILOT_GITHUB_TOKEN` . Optionen pro Clientumgebung werden nicht unterstützt. Legen Sie ihn für einen vorhandenen Laufzeit-URI für diesen Laufzeitprozess fest.

## Aktualisierungs-Token

Stellen Sie ein neues Installationstoken vor Ablauf des aktuellen Tokens vor. Starten Sie für einen untergeordneten Prozess den SDK-Client mit der neuen Umgebung neu. Starten Sie für eine in-Process- oder vorhandene Laufzeit die Hostlaufzeit mit dem neuen Token neu.

## Billing

Die Verwendung wird dem Konto zugeordnet und in Rechnung gestellt, das die GitHub App-Installation besitzt. Verwenden Sie eine Organisationsinstallation für die Abrechnung der Organisation; Verwendung von Benutzerkontoinstallationsattributen für diesen Benutzer.

## Troubleshooting

| Symptom                                                                                              | Prüfen                                                                                                                             |
| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| `401 Unauthorized`                                                                                   | Bestätigen Sie, dass die Organisation GitHub App-Installationsauthentifizierung für Copilot unterstützt.                           |
| `403 Resource not accessible by integration` oder ein Fehler beim Erwähnen von Benutzerinformationen | Bestätigen Sie, dass sich das Installationstoken befindet `COPILOT_GITHUB_TOKEN`, nicht die explizite Tokenoption des SDK.         |
| `403 Forbidden`aus der Copilot-API                                                                   | Bestätigen Sie, dass die Tokenanforderung enthält `repository_ids` und .`copilot_requests: write`                                  |
| `403 Forbidden` mit der erforderlichen Tokenanforderung                                              | Vergewissern Sie sich, dass die App-Installation zugriff auf **alle Repositorys** hat, und stellen Sie dann ein neues Token fest.  |
| Das angeforderte Modell ist nicht verfügbar.                                                         | Vergewissern Sie sich, dass die Copilot-Richtlinie der Organisation das Modell zulässt und die gebündelte Laufzeit es unterstützt. |
| Falsche Rechnung in Rechnung gestellt                                                                | Bestätigen Sie, dass die Installation zur beabsichtigten Organisation gehört.                                                      |

## Weiterführende Lektüre

* [Authentication](/de/copilot/how-tos/copilot-sdk/auth/authenticate): andere Authentifizierungsmethoden und Priorität
* [Generieren eines Installationszugriffstokens für eine GitHub App](/de/apps/creating-github-apps/authenticating-with-a-github-app/generating-an-installation-access-token-for-a-github-app): GitHub App-Tokenerstellung