Acerca de GitHub Actions la autenticación
Si necesita realizar solicitudes de API autenticadas en un GitHub Actions flujo de trabajo o ejecutar una acción personalizada que requiera un token, debe usar el elemento GITHUB_TOKEN integrado si es posible. Sin embargo, GITHUB_TOKEN solo puedes acceder a los recursos dentro del repositorio del flujo de trabajo. Si necesita acceder a recursos adicionales, como recursos de una organización o en otro repositorio, puede usar .GitHub App Para obtener más información sobre por qué podría usar un GitHub App elemento sobre un personal access token, vea Acerca de la creación de aplicaciones de GitHub.
Autenticación con GitHub App
Para poder usar un GitHub App para realizar solicitudes autenticadas a la API, debes registrar una GitHub App, almacenar las credenciales de tu aplicación e instalar tu aplicación. Una vez hecho esto, puede usar la aplicación para crear un token de acceso de instalación, que se puede usar para realizar solicitudes de API autenticadas en un GitHub Actions flujo de trabajo. También puedes pasar el token de acceso de instalación a una acción personalizada que requiera un token.
-
Registre un GitHub App. Asigne a su GitHub App registro los permisos necesarios para acceder a los recursos deseados. Para más información, consulta Registro de una aplicación de GitHub y Elección de permisos para una aplicación de GitHub.
-
Almacene el identificador de cliente de su GitHub App como una variable de configuración GitHub Actions. Puedes encontrar el id. de cliente en la página de configuración de la aplicación. El id. de cliente es diferente del id. de la aplicación. Para obtener más información sobre cómo navegar a la página de configuración de GitHub App, vea Modificación de un registro de aplicación de GitHub. Para obtener más información sobre el almacenamiento de variables de configuración, consulta Almacenamiento de información en variables.
-
Generar una llave privada para tu app. Almacena el contenido del archivo resultante como un secreto. (Almacene todo el contenido del archivo, incluidos
-----BEGIN RSA PRIVATE KEY-----y-----END RSA PRIVATE KEY-----). Para más información, consulte Administración de claves privadas para aplicaciones de GitHub. Para obtener más información sobre cómo almacenar secretos, consulta Uso de secretos en Acciones de GitHub. -
Instale el GitHub App en la cuenta correcta y concédale permisos y acceso a todos los repositorios a los que quiera que acceda el flujo de trabajo. Para más información, consulta Instalación de su propia aplicación de GitHub.
-
En el GitHub Actions flujo de trabajo, cree un token de acceso de instalación, que puede usar para realizar solicitudes de API.
Para ello, puede usar una acción propiedad de GitHub, como se muestra en el siguiente ejemplo. Si prefiere no usar esta acción, puede bifurcar y modificar la acción
actions/create-github-app-tokeno escribir un script para que el flujo de trabajo cree manualmente un token de instalación. Para más información, consulta Autenticación como una instalación de una aplicación de GitHub.En el siguiente flujo de trabajo de ejemplo se usa la acción
actions/create-github-app-tokenpara generar un token de acceso de instalación. A continuación, el flujo de trabajo usa el token para realizar una solicitud de API a través de GitHub CLI.En el siguiente flujo de trabajo, reemplace
APP_CLIENT_IDpor el nombre de la variable de configuración donde almacenó su ID de cliente. ReemplazaAPP_PRIVATE_KEYcon el nombre del secreto donde almacenaste la clave privada de la aplicación.
on:
workflow_dispatch:
jobs:
demo_app_authentication:
runs-on: ubuntu-latest
steps:
- name: Generate a token
id: generate-token
uses: actions/create-github-app-token@v3
with:
client-id: ${{ vars.APP_CLIENT_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
- name: Use the token
env:
GH_TOKEN: ${{ steps.generate-token.outputs.token }}
run: |
gh api octocat
on:
workflow_dispatch:
jobs:
demo_app_authentication:
runs-on: ubuntu-latest
steps:
- name: Generate a token
id: generate-token
uses: actions/create-github-app-token@v3
with:
client-id: ${{ vars.APP_CLIENT_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
- name: Use the token
env:
GH_TOKEN: ${{ steps.generate-token.outputs.token }}
run: |
gh api octocat