{"meta":{"title":"Autenticación de servidor a servidor","intro":"Use un token de acceso de instalación de corta duración cuando un servicio necesite realizar solicitudes de Copilot en nombre de una organización sin las credenciales de un usuario. En Acciones de GitHub, use GITHUB_TOKEN integrado en su lugar.","product":"GitHub Copilot","breadcrumbs":[{"href":"/es/copilot","title":"GitHub Copilot"},{"href":"/es/copilot/how-tos","title":"Procedimientos"},{"href":"/es/copilot/how-tos/copilot-sdk","title":"SDK de Copilot"},{"href":"/es/copilot/how-tos/copilot-sdk/auth","title":"Autenticación"},{"href":"/es/copilot/how-tos/copilot-sdk/auth/server-to-server-tokens","title":"Tokens de servidor a servidor"}],"documentType":"article"},"body":"# Autenticación de servidor a servidor\n\nUse un token de acceso de instalación de corta duración cuando un servicio necesite realizar solicitudes de Copilot en nombre de una organización sin las credenciales de un usuario. En Acciones de GitHub, use GITHUB_TOKEN integrado en su lugar.\n\n<!-- markdownlint-disable GHD046 GHD005 -->\n\n<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->\n\n## Acciones de GitHub\n\nPara los flujos de trabajo en un repositorio propiedad de la organización, conceda permisos al token integrado para hacer solicitudes a 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\nLa directiva de la organización **Permitir el uso de Copilot CLI facturado a la organización** debe estar habilitada. Este enfoque no necesita ningún secreto de autenticación almacenado ni GitHub aplicación. Para obtener más información, consulte [Uso de la CLI de Copilot en Acciones de GitHub con GITHUB\\_TOKEN](/es/copilot/how-tos/copilot-cli/use-copilot-cli-in-actions).\n\n## Otros servicios y sistemas de CI\n\nPara servicios fuera de Acciones de GitHub:\n\n1. Cree una aplicación de GitHub con el permiso del repositorio **Solicitudes de Copilot** establecido en **Lectura y escritura**.\n\n2. Instálelo en la organización a la que se debe facturar. La comprobación de permisos de Copilot actual requiere acceso **a todos los repositorios**.\n\n3. [Generación de un token de acceso de instalación para una aplicación de GitHub](/es/apps/creating-github-apps/authenticating-with-a-github-app/generating-an-installation-access-token-for-a-github-app) con un identificador del repositorio y el permiso de Copilot:\n\n   ```json\n   {\n     \"repository_ids\": [123456789],\n     \"permissions\": {\n       \"copilot_requests\": \"write\"\n     }\n   }\n   ```\n\n4. Pase el token resultante `ghs_` al entorno de ejecución como `COPILOT_GITHUB_TOKEN`.\n\nLa organización debe estar habilitada para las solicitudes de Copilot de las instalaciones de GitHub App. Los tokens de instalación expiran después de una hora.\n\n> \\[!WARNING]\n> No pase un token de instalación mediante `github_token`, `gitHubToken` o una opción equivalente del SDK. Esa opción es para tokens de usuario. Los tokens de instalación deben usar la ruta de autenticación del entorno de ejecución.\n\n## Configuración del entorno de ejecución\n\nEn los ejemplos siguientes se supone que el token minted está en `INSTALLATION_TOKEN`. Solo lo pasan al entorno de ejecución hijo y deshabilitan el recurso a las credenciales de usuario almacenadas.\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 FFI en el proceso, establezca `COPILOT_GITHUB_TOKEN` en el entorno del host antes de cargar el entorno de ejecución; no se admiten opciones de entorno específicas por cliente. Para un URI de entorno de ejecución existente, configúrelo en ese proceso de ejecución.\n\n## Tokens de actualización\n\nEmita un nuevo token de instalación antes de que expire el token actual. Para un proceso secundario, reinicie el cliente del SDK con el nuevo entorno. Para un entorno de ejecución en proceso o existente, reinicie el entorno de ejecución del host con el nuevo token.\n\n## Billing\n\nEl uso se atribuye y factura a la cuenta que posee la instalación de la aplicación GitHub. Utilice una instalación de la organización para la facturación de la organización; una instalación de la cuenta de usuario atribuye el uso a ese usuario.\n\n## Troubleshooting\n\n| Síntoma                                                                                         | Check                                                                                                                                        |\n| ----------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |\n| `401 Unauthorized`                                                                              | Confirme que la organización admite la autenticación de instalación de aplicaciones de GitHub para Copilot.                                  |\n| `403 Resource not accessible by integration` o un error al mencionar la información del usuario | Confirme que el token de instalación está en `COPILOT_GITHUB_TOKEN`, no en la opción explícita de token del SDK.                             |\n| `403 Forbidden`desde la API de Copilot                                                          | Confirme que la solicitud de token contiene `repository_ids` y `copilot_requests: write`.                                                    |\n| `403 Forbidden` con la solicitud de token necesaria                                             | Confirme que la instalación de la aplicación tiene acceso a **Todos los repositorios** y, a continuación, genere un nuevo token.             |\n| El modelo solicitado no está disponible                                                         | Confirme que la directiva de Copilot de la organización permite usar el modelo y que el entorno de ejecución incluido sea compatible con él. |\n| Cuenta incorrecta facturada                                                                     | Confirme que la instalación pertenece a la organización deseada.                                                                             |\n\n## Lectura adicional\n\n* [Autenticación](/es/copilot/how-tos/copilot-sdk/auth/authenticate): otros métodos de autenticación y prioridad\n* [Generación de un token de acceso de instalación para una aplicación de GitHub](/es/apps/creating-github-apps/authenticating-with-a-github-app/generating-an-installation-access-token-for-a-github-app): creación de tokens de aplicación de GitHub"}