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 de las GitHub Apps con un token de acceso de instalación se escala 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 la aplicación necesita acceder a recursos de nivel empresarial como el propio objeto empresarial, debes usar una OAuth app porque todavía no se pueden conceder permisos a una GitHub App en una empresa. Las GitHub Apps pueden seguir accediendo a los recursos del repositorio y de la organización propiedad de la empresa.
Para más información sobre las GitHub Apps, consulta Acerca de la creación de GitHub Apps.
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?
Puedes instalar GitHub Apps en tu cuenta personal o en las organizaciones que te pertenezcan. Si tienes permisos administrativos en un repositorio, puedes instalar GitHub Apps en las cuentas de la organización. Si se instala una GitHub App en un repositorio y requiere permisos de organización, el propietario de la organización deberá 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 su organización, consulte "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.
Los propietarios de organizaciones pueden decidir si permitir que los colaboradores externos soliciten acceso a OAuth apps y GitHub Apps sin aprobar. Para obtener más información, vea «Limitación de solicitudes de acceso a aplicaciones de OAuth y aplicaciones de GitHub».
Warning
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 |
---|---|
Debes ser un propietario de la organización o tener permisos administrativos en un repositorio para instalar una GitHub App en una organización. Si se instala una GitHub App en un repositorio y requiere permisos de organización, el propietario de la organización deberá aprobar la aplicación. | Puedes autorizar una OAuth app para que tenga acceso a los recursos. |
Puedes instalar una GitHu App en tu repositorio personal. | Puedes autorizar una OAuth app para que tenga acceso a los recursos. |
Debes ser un propietario de la organización, propietario del repositorio personal, o tener permisos administrativos en un repositorio para desinstalar una GitHub App y eliminar su acceso. | Puedes borrar un token de acceso de OAuth para eliminar el acceso. |
Debes ser un propietario de la organización o tener permisos administrativos en un repositorio para solicitar la instalación de una GitHub App. | 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 patrón laboral, pero puedes decidir no otorgar a esa compilación acceso de servicio a los repositorios en tu cuenta personal. Una GitHub App permanece instalada si la persona que la configuró deja a 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 de 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 GitHub App pierde acceso a los recursos si un administrador elimina los repositorios de la instalación. | Un token de acceso de OAuth pierde acceso a los recursos cuando el usuario mismo pierde acceso a ellos, como cuando pierden 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 GitHub Apps pueden solicitar acceso por separado a los informes de problemas y a las solicitudes de extracción 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 directivas de aplicación de la organización. Una aplicación de GitHub solo tiene acceso a los repositorios a los que un propietario de organización le permite acceder. | 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. |
Las GitHub Apps reciben un evento de webhook cuando se cambia o elimina 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
Note
Las aplicaciones de GitHub también pueden 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 GitHub App puede solicitar un token de acceso de la instalación si utiilza una llave privada con un formato de token web de 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 el bot de aplicaciones de GitHub, por ejemplo, @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 volumen del usuario de 5000 solicitudes por hora. |
Pueden concederse aumentos del límite de frecuencia tanto en el nivel de las aplicaciones de GitHub (lo que afecta a todas las instalaciones) como en el nivel de una instalación individual. | Se conceden aumentos de límite de frecuencia por OAuth app. Cada token concedido a esa OAuth app obtiene el límite aumentado. |
Las GitHub Apps pueden autenticarse a nombre del usuario. El flujo de autorización es el mismo que el flujo de autorización de la aplicación de 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 GitHub App de Integración Continua (IC) puede solicitar acceso de lectura al contenido del repositorio y acceso de escritura la API de estado. Puede que alguna otra GitHub App no tenga acceso de escritura o lectura al código, pero aún podrá administrar propuestas, etiquetas e hitos. Las OAuth apps no pueden usar permisos detallados.
Access | Aplicaciones de GitHub (permisos 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 | Issues | Á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 | Las GitHub Apps incluyen un webhook predeterminadamente. | Ámbito write:repo_hook o write:org_hook . |
Descubrimiento de repositorios
Aplicaciones de GitHub | OAuth apps |
---|---|
Aplicaciones de GitHub 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 Github Apps reciben webhooks cuando los repositorios se agregan o eliminan 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 |
---|---|
Predeterminadamente, las GitHub Apps tienen un solo webhook que recibe los eventos que se les ha configurado para recibir para cada repositorio al que tengan acceso. | Las OAuth apps solicitan el ámbito del webhook para crear un webhook de repositorio para cada repositorio del que necesiten recibir eventos. |
Las GitHub Apps reciben algunos 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 de 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 al contenido del repositorio y usan el 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 segregan sistemas automatizados con el sistema de usuarios de GitHub.
Las cuentas de bot son específicas para las GitHub Apps y se crean en cada GitHub App.
Aplicaciones de GitHub | OAuth apps |
---|---|
Los bots de las GitHub Apps no consumen una plaza de GitHub Enterprise. | Una cuenta de usuario de máquina consume una plaza de GitHub Enterprise. |
Ya que jamás se otorga una contraseña a un bot de una GitHub App, un cliente no podrá 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. |