{"meta":{"title":"Autenticação de servidor para servidor","intro":"Use um token de acesso de instalação de curta duração quando um serviço precisar fazer solicitações Copilot em nome de uma organização sem as credenciais de um usuário. Em GitHub Actions, use o internoGITHUB_TOKEN.","product":"GitHub Copilot","breadcrumbs":[{"href":"/pt/copilot","title":"GitHub Copilot"},{"href":"/pt/copilot/how-tos","title":"Instruções"},{"href":"/pt/copilot/how-tos/copilot-sdk","title":"SDK do Copilot"},{"href":"/pt/copilot/how-tos/copilot-sdk/auth","title":"Autenticação"},{"href":"/pt/copilot/how-tos/copilot-sdk/auth/server-to-server-tokens","title":"Tokens de servidor para servidor"}],"documentType":"article"},"body":"# Autenticação de servidor para servidor\n\nUse um token de acesso de instalação de curta duração quando um serviço precisar fazer solicitações Copilot em nome de uma organização sem as credenciais de um usuário. Em GitHub Actions, use o internoGITHUB_TOKEN.\n\n<!-- markdownlint-disable GHD046 GHD005 -->\n\n<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->\n\n## GitHub Actions\n\nPara fluxos de trabalho em um repositório de propriedade da organização, conceda a permissão de token interno para fazer solicitações de Copilot:\n\n```yaml\npermissions:\n  contents: read\n  copilot-requests: write\n\njobs:\n  copilot:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v6\n      - run: your-application\n        env:\n          GITHUB_TOKEN: $\n```\n\nA **CLI de permitir o uso de Copilot da organização cobrada na política da organização** deve ser habilitada. Essa abordagem não precisa de GitHub aplicativo ou segredo de autenticação armazenado. Para obter detalhes, consulte [Usando Copilot CLI em GitHub Actions com GITHUB\\_TOKEN](/pt/copilot/how-tos/copilot-cli/use-copilot-cli-in-actions).\n\n## Outros serviços e sistemas de CI\n\nPara serviços fora GitHub Actions:\n\n1. Crie um aplicativo GitHub com a permissão do repositório <c0>Copilot Solicitações</c0> definida como <c1>Leitura & gravação</c1>.\n\n2. Instale-o na organização que deve ser cobrada. A verificação de permissão de Copilot atual requer **acesso a todos os repositórios**.\n\n3. [Gerando um token de acesso de instalação para um aplicativo GitHub](/pt/apps/creating-github-apps/authenticating-with-a-github-app/generating-an-installation-access-token-for-a-github-app) com uma ID do repositório e a permissão Copilot:\n\n   ```json\n   {\n     \"repository_ids\": [123456789],\n     \"permissions\": {\n       \"copilot_requests\": \"write\"\n     }\n   }\n   ```\n\n4. Passe o token resultante `ghs_` para o runtime como `COPILOT_GITHUB_TOKEN`.\n\nA organização deve ser habilitada para Copilot solicitações de instalações do GitHub App. Os tokens de instalação expiram após uma hora.\n\n> \\[!WARNING]\n> Não passe um token de instalação por meio da opção do SDK `gitHubToken``github_token`ou equivalente. Essa opção é para tokens de usuário. Os tokens de instalação devem usar o caminho de autenticação de ambiente de runtime.\n\n## Configurar o runtime\n\nOs exemplos a seguir pressupõem que o token cunhado está em `INSTALLATION_TOKEN`. Eles o transmitem apenas para o runtime filho e desabilitam o fallback para as credenciais de usuário armazenadas.\n\n<div class=\"ghd-codetabs\">\n<div class=\"ghd-codetab\" data-lang=\"typescript\" data-label=\"TypeScript\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">TypeScript</div>\n\n```typescript\nimport { CopilotClient, RuntimeConnection } from \"@github/copilot-sdk\";\n\nconst token = process.env.INSTALLATION_TOKEN;\nif (!token) throw new Error(\"INSTALLATION_TOKEN is required\");\n\nconst client = new CopilotClient({\n    connection: RuntimeConnection.forStdio(),\n    env: {\n        ...process.env,\n        COPILOT_GITHUB_TOKEN: token,\n    },\n    useLoggedInUser: false,\n});\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"python\" data-label=\"Python\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Python</div>\n\n```python\nimport os\n\nfrom copilot import CopilotClient, RuntimeConnection\n\nclient = CopilotClient(\n    connection=RuntimeConnection.for_stdio(),\n    env={**os.environ, \"COPILOT_GITHUB_TOKEN\": os.environ[\"INSTALLATION_TOKEN\"]},\n    use_logged_in_user=False,\n)\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"go\" data-label=\"Go\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Go</div>\n\n```golang\npackage main\n\nimport (\n    \"log\"\n    \"os\"\n\n    copilot \"github.com/github/copilot-sdk/go\"\n)\n\nfunc main() {\n    token, ok := os.LookupEnv(\"INSTALLATION_TOKEN\")\n    if !ok {\n        log.Fatal(\"INSTALLATION_TOKEN is required\")\n    }\n    client := copilot.NewClient(&copilot.ClientOptions{\n        Connection:      copilot.StdioConnection{},\n        Env:             append(os.Environ(), \"COPILOT_GITHUB_TOKEN=\"+token),\n        UseLoggedInUser: copilot.Bool(false),\n    })\n    _ = client\n}\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"rust\" data-label=\"Rust\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Rust</div>\n\n```rust\nuse github_copilot_sdk::{ClientOptions, Transport};\n\nfn main() {\n    let token = std::env::var(\"INSTALLATION_TOKEN\").expect(\"INSTALLATION_TOKEN is required\");\n    let options = ClientOptions::new()\n        .with_transport(Transport::Stdio)\n        .with_env([(\"COPILOT_GITHUB_TOKEN\", token)])\n        .with_use_logged_in_user(false);\n    drop(options);\n}\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"dotnet\" data-label=\".NET\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">.NET</div>\n\n```csharp\nusing System.Collections;\nusing GitHub.Copilot;\n\nvar token = Environment.GetEnvironmentVariable(\"INSTALLATION_TOKEN\")\n    ?? throw new InvalidOperationException(\"INSTALLATION_TOKEN is required\");\nvar environment = Environment.GetEnvironmentVariables()\n    .Cast<DictionaryEntry>()\n    .ToDictionary(entry => (string)entry.Key, entry => entry.Value?.ToString() ?? \"\");\nenvironment[\"COPILOT_GITHUB_TOKEN\"] = token;\n\nawait using var client = new CopilotClient(new CopilotClientOptions\n{\n    Connection = RuntimeConnection.ForStdio(),\n    Environment = environment,\n    UseLoggedInUser = false,\n});\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"java\" data-label=\"Java\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Java</div>\n\n```java\nimport com.github.copilot.CopilotClient;\nimport com.github.copilot.rpc.CopilotClientOptions;\nimport java.util.HashMap;\nimport java.util.Objects;\n\nvar environment = new HashMap<>(System.getenv());\nvar token = Objects.requireNonNull(\n    System.getenv(\"INSTALLATION_TOKEN\"), \"INSTALLATION_TOKEN is required\");\nenvironment.put(\"COPILOT_GITHUB_TOKEN\", token);\n\ntry (var client = new CopilotClient(new CopilotClientOptions()\n        .setEnvironment(environment)\n        .setUseLoggedInUser(false))) {\n    // Use the client.\n}\n```\n\n</div>\n\n</div>\n\nPara o FFI em processo, defina `COPILOT_GITHUB_TOKEN` no ambiente do host antes de carregar o runtime; não há suporte para opções de ambiente por cliente. Para um URI de runtime existente, defina-o nesse processo de runtime.\n\n## Tokens de atualização\n\nMint um novo token de instalação antes do token atual expirar. Para um processo filho, reinicie o cliente do SDK com o novo ambiente. Para um runtime em processo ou existente, reinicie o runtime do host com o novo token.\n\n## Billing\n\nO uso é atribuído e cobrado na conta que possui a instalação do aplicativo GitHub. Usar uma instalação da organização para cobrança da organização; um uso de atributos de instalação de conta de usuário para esse usuário.\n\n## Resolução de problemas\n\n| Sintoma                                                                                     | Verificação                                                                                                      |\n| ------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |\n| `401 Unauthorized`                                                                          | Confirme se a organização dá suporte à autenticação de instalação do aplicativo GitHub para Copilot.             |\n| `403 Resource not accessible by integration` ou um erro ao mencionar informações do usuário | Confirme se o token de instalação está dentro `COPILOT_GITHUB_TOKEN`, não a opção de token explícito do SDK.     |\n| `403 Forbidden`da API de Copilot                                                            | Confirme se a solicitação de token contém `repository_ids` e `copilot_requests: write`.                          |\n| `403 Forbidden` com a solicitação de token necessária                                       | Confirme se a instalação do aplicativo tem acesso **a Todos os repositórios** e, em seguida, crie um novo token. |\n| O modelo solicitado não está disponível                                                     | Confirme se a política de Copilot da organização permite o modelo e o runtime empacotado dá suporte a ele.       |\n| Conta incorreta cobrada                                                                     | Confirme se a instalação pertence à organização pretendida.                                                      |\n\n## Leitura adicional\n\n* [Autenticação](/pt/copilot/how-tos/copilot-sdk/auth/authenticate): outros métodos de autenticação e prioridade\n* [Gerando um token de acesso de instalação para um aplicativo GitHub](/pt/apps/creating-github-apps/authenticating-with-a-github-app/generating-an-installation-access-token-for-a-github-app): criação de token de aplicativo GitHub"}