GitHub Enterprise's OAuth implementation supports the standard authorization code grant type.
If you want to skip authorizing your app in the standard way, such as when testing your app, you can use the non-web application flow.
For standard apps that run in the browser, use the web application flow to obtain an authorization code and exchange it for a token. (El tipo de concesión implícito no es compatible)
Flujo de aplicaciones Web
Nota: Si estás creando una GitHub App, aún puedes utilizar el flujo de aplicaciones web de OAuth, pero la configuración tiene diferencias importantes. Consulta la sección "Identificar y autorizar usuarios para las GitHub Apps" para obtener más información.
The web application flow to authorize users for your app is:
- Se redirecciona a los usuarios para solicitar su identidad de GitHub
- GitHub redirecciona a los usuarios de vuelta a tu sitio
- Tu aplicación accede a la API con el token de acceso del usuario
1. Solicita la identidad de un usuario de GitHub
GET http(s)://[hostname]/login/oauth/authorize
Cuando tu GitHub App especifica un parámetro de login
, solicita a los usuarios con una cuenta específica que pueden utilizar para registrarse y autorizar tu app.
Parámetros
Nombre | Tipo | Descripción |
---|---|---|
client_id | string | Requerido. La ID de cliente que recibiste de GitHub cuando te registraste. |
redirect_uri | string | La URL en tu aplicación a donde se enviará a los usuarios después de la autorización. Consulta los siguientes detalles sobre urls de redireccionamiento. |
login | string | Sugiere una cuenta específica para utilizar para registrarse y autorizar la app. |
alcance | string | Una lista de alcances delimitada en espacio. De no proporcionarse, el scope será, predeterminadamente, una lista vacía para los usuarios que no han autorizado ningún alcance para la aplicación. Para los usuarios que han autorizado alcances para la aplicación, el usuario no se mostrará en la página de autorización de OAuth con la lista de alcances. En vez de esto, este paso del flujo se completara automáticamente con el conjunto de alcances que el usuario haya autorizado para la aplicación. Por ejemplo, si un usuario ya realizó el flujo web dos veces y autorizó un token con alcance de user y otro con alcance de repo , un tercer flujo web que no proporcione un scope recibirá un token con los alcances user y repo . |
state | string | Una secuencia aleatoria indescifrable. Se utiliza para protegerte contra los ataques de falsificación de solicitudes entre sitios. |
allow_signup | string | Ya sea que se ofrezca o no una opción para registrarse en GitHub a los usuarios sin autenticar durante el flujo de OAuth, la opción predeterminada es true . Utiliza false cuando una política prohíba los registros. |
2. GitHub redirecciona a los usuarios de vuelta a tu sitio
Si el usuario acepta tu solicitud, GitHub Enterprise lo redirecciona a tu sitio con un code
temporal en un parámetro de código así como el estado que proporcionaste en el paso previo en un parámetro de state
. El código temporal caducará después de 10 minutos. Si los estados no empatan, entonces un tercero creó la solicitud, y debes abandonar el proceso.
Intercambia este code
por un token de acceso:
POST http(s)://[hostname]/login/oauth/access_token
Parámetros
Nombre | Tipo | Descripción |
---|---|---|
client_id | string | Requerido. La ID de cliente que recibiste de GitHub Enterprise para tu App GitHub. |
client_secret | string | Requerido. El secreto del cliente que recibiste de GitHub Enterprise para tu App GitHub. |
código | string | Requerido. El código que recibiste como respuesta al Paso 1. |
redirect_uri | string | La URL en tu aplicación, hacia la cual se envía a los usuarios después de su autorización. |
state | string | La secuencia aleatoria indescifrable que proporcionaste en el Paso 1. |
Respuesta
Predeterminadamente, la respuesta toma la siguiente forma:
access_token=e72e16c7e42f292c6912e7710c838347ae178b4a&token_type=bearer
También puedes recibir el contenido en diferentes formatos, dependiendo del encabezado de aceptación:
Accept: application/json
{"access_token":"e72e16c7e42f292c6912e7710c838347ae178b4a", "scope":"repo,gist", "token_type":"bearer"}
Accept: application/xml
<OAuth>
<token_type>bearer</token_type>
<scope>repo,gist</scope>
<access_token>e72e16c7e42f292c6912e7710c838347ae178b4a</access_token>
</OAuth>
3. Utiliza el token de acceso para acceder a la API
El token de acceso te permite hacer solicitudes a la API a nombre de un usuario.
Authorization: token OAUTH-TOKEN
GET http(s)://[hostname]/api/v3/user
Por ejemplo, en curl, puedes configurar el encabezado de autorización de la siguiente manera:
curl -H "Authorization: token OAUTH-TOKEN" http(s)://[hostname]/api/v3/user
Flujo de aplicaciónes no web
La autenticación no web está disponible para situaciones limitadas, como las pruebas. Si lo necesitas, puedes utilizar la Autenticación Básica para crear un token de acceso personal utilizando tu página de configuración de los tokens de acceso personal. Esta técnica le permite al usuario revocar el acceso en cualquier momento.
Nota: CUando utilices el flujo de aplicaciones no web para crear un token OAuth2, asegúrate de entender cómo trabajar con autenticaciones de dos factores si tú o tus usuarios han habilitado dicho tipo de autenticación.
URLs de Redirección
El parámetro redirect_uri
es opcional. Si se deja fuera, GitHub redireccionará a los usuarios a la URL de rellamado configurada en la aplicación de OAuth. De proporcionarse, el puerto y host de las URL de rellamado deberán empatar exactamente con la URL de rellamado. La ruta de las URL de redireccionamiento deberán referenciar un subdirectorio de la URL de rellamado.
CALLBACK: http://example.com/path
GOOD: http://example.com/path
GOOD: http://example.com/path/subdir/other
BAD: http://example.com/bar
BAD: http://example.com/
BAD: http://example.com:8080/path
BAD: http://oauth.example.com:8080/path
BAD: http://example.org
URLs de redirección de Localhost
El parámetro opcional redirect_uri
también puede utilizarse para las URL de localhost. Si la aplicación especifica una URL y puerto de localhost, entonces, después de autorizar la aplicación, los usuarios se redireccionarán al puerto y URL proporcionados. La redirect_uri
no necesita empatar con el puerto especificado en la url de rellamado para la app.
Para la URL de rellamado de http://localhost/path
, puedes utilizar esta redirect_uri
:
Crear tokens múltiples para Apps de OAuth
Puedes crear tokens múltiples para una combinación de usuario/aplicación/alcance para crear tokens para casos de uso específicos.
Esto es útil si tu Aplicación de OAuth es compatible con un flujo de trabajo que utilice GitHub para registrarse y requiera solo información básica del usuario. Otro flujo de trabajo podría requerir acceso a los repositorios privados del usuario. Al utilizar tokens múltiples, tu App de OAuth podrá llevar a cabo el flujo web para cada caso de uso, solicitando únicamente los alcances que necesite. Si un usuario utiliza tu aplicación únicamente para registrarse, nunca se les solicitará otorgar acceso a tu App de OAuth para sus repositorios privados.
Hay un límite en la cantidad de tokens que se emiten por combinación de usuario/aplicación/alcance. Si tu aplicación solicita suficientes tokens para sobrepasar uno de los límites, los tokens anteriores con el mismo alcance que se está solicitando dejarán de funcionar.
Advertencia: Si revocas todos los permisos de una App OAuth borrarás cualquier llave SSH que haya generado la aplicación en nombre del usuario, , incluyendo las llaves de despliegue.
Dirigir a los usuarios para revisar su acceso
Puedes vincular a la información de autorización para una App de OAuth para que los usuarios puedan revisar y revocar sus autorizaciones de la aplicación.
Para crear este vínculo, necesitarás el client_id
de tus Apps de Oauth, el cual recibiste de GitHub cuando registraste la aplicación.
http(s)://[hostname]/settings/connections/applications/:client_id
Tip: Para aprender más acerca de los recursos a los cuales puede acceder tu App de OAuth para un usuario, consulta la sección "Descubrir recursos para un usuario".