Acerca de las GitHub Apps y las OAuth apps
En general, se prefieren las GitHub Apps antes que las OAuth apps. Las GitHub Apps usan permisos específicos, proporcionan al usuario más control sobre los repositorios a los que puede acceder la aplicación y usan tokens de corta duración. Estas propiedades pueden mejorar la seguridad de la aplicación, ya que limitan el daño que se causaría si se filtrasen las credenciales de la aplicación.
De forma similar a las OAuth apps, las GitHub Apps pueden usar de todos modos OAuth 2.0, generar un tipo de token de OAuth (denominado token de acceso de usuario) y realizar acciones en nombre de un usuario. No obstante, las GitHub Apps también pueden actuar de manera independiente del usuario. Esto resulta beneficioso para las automatizaciones que no requieren la entrada del usuario. La aplicación seguirá funcionando aunque la persona que la instaló en una organización la abandone.
Las GitHub Apps tienen webhooks centralizados integrados. Las GitHub Apps pueden recibir eventos de webhook de todos los repositorios y organizaciones a los que pueda acceder la aplicación. Por el contrario, las OAuth apps deben configurar webhooks de manera individual para cada repositorio y organización.
El límite de frecuencia para GitHub Apps con un token de acceso de instalación aumenta con el número de repositorios y el número de usuarios de la organización. Por el contrario, las OAuth apps tienen límites de frecuencia inferiores y no se escalan.
Hay un caso en el que se prefiere una OAuth app sobre una GitHub App. Si tu aplicación necesita acceder a recursos a nivel empresarial, como el objeto empresarial en sí, debes usar una OAuth app porque a una GitHub App aún no se le pueden otorgar permisos para actuar a nivel empresarial. Las GitHub Apps pueden seguir accediendo a los recursos de la organización y del repositorio que son propiedad de la empresa.
Para más información sobre las GitHub Apps, consulta Acerca de la creación de aplicaciones de GitHub.
Para más información sobre cómo migrar una OAuth app existente a una GitHub App, consulta Migración de aplicaciones de OAuth a aplicaciones de GitHub.
¿Quién puede instalar aplicaciones de GitHub y autorizar OAuth apps?
Puede instalar GitHub Apps en su cuenta personal o en las organizaciones que posee. Si tiene permisos de administrador en un repositorio, puede instalar aplicaciones de GitHub en las cuentas de la organización. Si una aplicación de GitHub está instalada en un repositorio y requiere permisos de organización, el propietario de la organización debe aprobar la aplicación.
Predeterminadamente, solo los propietarios de la organización pueden administrar los ajustes de las GitHub Apps en una organización. Para permitir que otros usuarios cambien la configuración del desarrollador de aplicaciones de GitHub que pertenecen a la organización, un propietario puede concederles permisos de administrador de aplicaciones de GitHub. Los administradores de aplicaciones de GitHub no pueden administrar aplicaciones de terceros. Para más información sobre cómo agregar y quitar administradores de aplicaciones de GitHub en la organización, consulta Roles en una organización.
Por el contrario, los usuarios autorizan OAuth apps, de forma que estas aplicaciones pueden actuar como el usuario autenticado. Por ejemplo, puedes autorizar una OAuth app que encuentre todas las notificaciones del usuario autenticado. Siempre puedes revocar los permisos de una OAuth app.
Advertencia
Si revocas todos los permisos de una OAuth app, se eliminarán todas las claves SSH generadas por la aplicación en nombre del usuario, incluidas las claves de implementación.
| aplicaciones de GitHub | OAuth apps |
|---|---|
| Debe ser propietario de la organización o tener permisos de administrador en un repositorio para instalar una aplicación de GitHub en una organización. Si una aplicación de GitHub está instalada en un repositorio y requiere permisos de organización, el propietario de la organización debe aprobar la aplicación. | Puedes autorizar una OAuth app para que tenga acceso a los recursos. |
| Puede instalar una aplicación de GitHub en el repositorio personal. | Puedes autorizar una OAuth app para que tenga acceso a los recursos. |
| Debe ser propietario de la organización, propietario del repositorio personal o tener permisos de administrador en un repositorio para desinstalar una aplicación de GitHub y quitar su acceso. | Puedes borrar un token de acceso de OAuth para eliminar el acceso. |
| Debe ser propietario de la organización o tener permisos de administrador en un repositorio para solicitar una instalación de GitHub aplicación. | Si una directiva de aplicación de la organización está activa, cualquier miembro de la organización puede solicitar la instalación de una OAuth app en una organización. Un propietario de la organización deberá aprobar o negar la solicitud. |
¿A qué pueden acceder las aplicaciones de GitHub y las OAuth apps?
Los propietarios de las cuentas pueden utilizar una GitHub App en una cuenta sin otorgarle acceso a otra cuenta. Por ejemplo, puedes instalar un servicio de compilación de terceros en la organización de tu empleador, pero decidir no otorgar acceso de ese servicio de compilación a los repositorios en tu cuenta personal. Una aplicación GitHub permanece instalada si la persona que la configuró deja la organización.
Una OAuth app autorizada tiene acceso a todos los recursos que son accesibles para el usuario o el propietario de la organización.
| aplicaciones de GitHub | OAuth apps |
|---|---|
| La instalación de una aplicación GitHub concede a la aplicación acceso a los repositorios elegidos de una cuenta de usuario u organización. | La autorización de una OAuth app concede a la aplicación acceso a los recursos accesibles del usuario. Por ejemplo, los repositorios a los que puede acceder. |
| El token de instalación de una aplicación de GitHub pierde el acceso a los recursos si un administrador quita los repositorios de la instalación. | Un token de acceso de OAuth pierde acceso a los recursos cuando el usuario pierde acceso, como cuando pierde el acceso de escritura a un repositorio. |
| Los tokens de acceso de instalación se limitan a repositorios especificados con los permisos que ha elegido el creador de la aplicación. | Un token de acceso de OAuth se limita mediante ámbitos. |
| Las aplicaciones de GitHub pueden solicitar un acceso separado a los problemas y a los pull requests sin acceder al contenido real del repositorio. | Las OAuth apps deben solicitar el ámbito repo para acceder a las incidencias, a las solicitudes de incorporación de cambios o a cualquier recurso que pertenezca al repositorio. |
| Las aplicaciones de GitHub no están sujetas a las políticas de aplicación de la organización. Una aplicación de GitHub solo tiene acceso a los repositorios a los que el propietario de la organización ha concedido acceso. | Si hay una directiva de aplicación de organización activa, solo un propietario de la organización puede autorizar la instalación de una OAuth app. Si está instalada, la OAuth app obtiene acceso a cualquier elemento visible para el token que el propietario de la organización tiene dentro de la organización aprobada. |
| Una aplicación GitHub recibe un evento de webhook cuando se cambia o quita una instalación. Esto indica al creador de la app cuando han recibido más o menos accesos a los recursos organizacionales. | Las OAuth apps pueden perder el acceso a una organización o a un repositorio en cualquier momento según el acceso cambiante del usuario que otorga los permisos. La OAuth app no te informará cuando pierde el acceso a un recurso. |
Identificación basada en tokens
Nota:
GitHub Apps también puede usar un token basado en el usuario. Para más información, consulta Autenticación con una aplicación de GitHub en nombre de un usuario.
| aplicaciones de GitHub | OAuth apps |
|---|---|
| Una aplicación GitHub puede solicitar un token de acceso de instalación mediante una clave privada con un formato de token web JSON fuera de banda. | Una OAuth app puede intercambiar un token de solicitud por un token de acceso después de una redirección a través de una solicitud web. |
| Un token de instalación identifica la aplicación como bot de aplicaciones de GitHub, como @jenkins-bot. | Un token de acceso identifica la aplicación como el usuario que ha concedido el token a la aplicación, por ejemplo, @octocat. |
| Los tokens de acceso de instalación caducan después de un tiempo predefinido (actualmente, 1 hora). | Los tokens de OAuth permanecen activos hasta que el cliente los revoque. |
| Las GitHub Apps instaladas en organizaciones o repositorios están sujetas a límites de tasa que se escalan con el número de instalaciones. Para más información, consulta Límites de frecuencia para aplicaciones de GitHub. | Los tokens de OAuth usan el límite de tasa del usuario de 5000 solicitudes por hora. |
| Se pueden conceder aumentos de límite de velocidad tanto en el nivel de aplicaciones de GitHub (que afectan a todas las instalaciones) como en el nivel de instalación individual. | Se conceden aumentos de límite de frecuencia por OAuth app. Cada token otorgado a esa OAuth app recibe el límite ampliado. |
| Las GitHub Apps pueden autenticarse a nombre del usuario. El flujo de autorización es el mismo que el de autorización de la aplicación OAuth app. Los tokens de acceso de usuario pueden expirar y renovarse con un token de actualización. Para más información, consulta Actualización de tokens de acceso de usuario y Autenticación con una aplicación de GitHub en nombre de un usuario. | El flujo de OAuth que utilizan las OAuth apps autoriza a una OAuth app en nombre del usuario. Este es el mismo flujo que se usa para generar un token de acceso de usuario de GitHub App. |
Solicitar niveles de permiso para recursos
A diferencia de las OAuth apps, las aplicaciones de GitHub tienen permisos específicos que les permiten solicitar acceso únicamente a lo que necesitan. Por ejemplo, una aplicación de GitHub para integración continua (CI) puede solicitar acceso de lectura al contenido del repositorio y acceso de escritura a la API de estado. Otra aplicación de GitHub no puede tener acceso de lectura o escritura al código, pero aún tiene la capacidad de administrar problemas, etiquetas e hitos. Las OAuth apps no pueden usar permisos detallados.
| Acceso | Aplicaciones de GitHub (permisos de read o write) | OAuth apps |
|---|
**Para acceder a los repositorios públicos** | El repositorio público necesita elegirse durante la instalación. | Ámbito `public_repo`. |
|
Para acceder al código o contenido del repositorio | Contenidos del repositorio | Ámbito repo. |
|
Para acceder a incidencias, etiquetas e hitos | Problemas | Ámbito repo. |
|
Para acceder a solicitudes de incorporación de cambios, etiquetas e hitos | Solicitudes de incorporación de cambios | Ámbito repo. |
|
Para acceder a estados de confirmación (para compilaciones de CI) | Estados de confirmación | Ámbito repo:status. |
|
Para acceder a implementaciones y estados de implementación | Implementaciones | Ámbito repo_deployment. |
|
Para recibir eventos desde un webhook | Una aplicación GitHub incluye un webhook de forma predeterminada. | Ámbito de write:repo_hook o write:org_hook. |
Descubrimiento de repositorios
| aplicaciones de GitHub | OAuth apps |
|---|---|
GitHub Apps puede examinar /installation/repositories para ver los repositorios a los que puede acceder la instalación. | Las OAuth apps pueden examinar /user/repos para obtener una vista de usuario, o /orgs/:org/repos para obtener una vista de organización de los repositorios accesibles. |
| Las aplicaciones de GitHub reciben webhooks cuando se agregan o eliminan repositorios de la instalación. | Las OAuth apps crean webhooks de organización para las notificaciones cuando se crea un repositorio nuevo dentro de una organización. |
webhooks
| aplicaciones de GitHub | OAuth apps |
|---|---|
| De forma predeterminada, GitHub Apps tienen un único webhook que recibe los eventos a los que están configurados para recibir para cada repositorio al que tienen acceso. | Las OAuth apps solicitan el ámbito del webhook para crear un webhook de repositorio para cada repositorio del que necesiten recibir eventos. |
| Las aplicaciones de GitHub reciben ciertos eventos a nivel organizacional con el permiso del miembro de la organización. | Las OAuth apps solicitan el ámbito del webhook de la organización para crear un webhook de organización para cada organización de la que necesiten recibir eventos de nivel de organización. |
| Los webhooks se deshabilitan automáticamente cuando se desinstala la aplicación GitHub. | Los webhooks no se deshabilitan automáticamente si se elimina el token de acceso de una OAuth app y no hay ninguna manera de limpiarlos automáticamente. Deberás pedir a los usuarios que lo hagan manualmente. |
Acceso a Git
| aplicaciones de GitHub | OAuth apps |
|---|---|
| Las aplicaciones de GitHub solicitan permiso para el contenido del repositorio y usan su token de acceso de instalación para autenticarse mediante Git basado en HTTP. Para obtener más información, consulta Generación de un token de acceso de instalación para una aplicación de GitHub. | Las OAuth apps solicitan el ámbito write:public_key y Crear una clave de implementación a través de la API. Posteriormente, pueden usar esa clave para realizar comandos de Git. |
| El token se utiliza como la contraseña HTTP. | El token se utiliza como el nombre de usuario HTTP. |
Cuentas de máquina vs cuentas de bot
Las cuentas de usuario de máquina son cuentas personales basadas en OAuth que separan sistemas automatizados mediante el sistema de usuario de GitHub.
Las cuentas de bot son específicas de GitHub Apps y están integradas en cada aplicación de GitHub.
| aplicaciones de GitHub | OAuth apps |
|---|---|
| Los bots de aplicaciones de GitHub no consumen una licencia de GitHub Enterprise . | Una cuenta de usuario de máquina consume una licencia de GitHub Enterprise. |
| Dado que un bot de aplicación de GitHub nunca se le concede una contraseña, un cliente no puede iniciar sesión directamente en él. | Una cuenta de usuario de máquina obtiene un nombre de usuario y contraseña para que el cliente lo administre y asegure. |