La implementación de OAuth de GitHub Enterprise Server es compatible con el tipo de otorgamientos de código de autorización estándar y con el Otorgamiento de Autorización de Dispositivos de OAuth 2.0 para las apps que no tengan acceso a un buscador web.
Si quieres saltar el proceso de autorización de tu app en el modo estándar, tal como sucede cuando la estás probando, puedes utilizar el flujo no web para aplicaciones.
Para autorizar tu app de OAuth, considera qué flujo de autorizaciones queda mejor con ella.
- flujo web de aplicaciones: Se utiliza para autorizar a los usuarios para las aplicaciones de OAuth que se ejecutan en el buscador. (El tipo de otorgamiento 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.
El flujo web de aplicaciones para autorizar a los usuarios en tu app es:
- 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 | Type | Descripción |
---|---|---|
client_id | secuencia | Requerido. La ID de cliente que recibiste de GitHub cuando te registraste. |
redirect_uri | secuencia | 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 | secuencia | Sugiere una cuenta específica para utilizar para registrarse y autorizar la app. |
alcance | secuencia | 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 | secuencia | Una secuencia aleatoria indescifrable. Se utiliza para protegerte contra los ataques de falsificación de solicitudes entre sitios. |
allow_signup | secuencia | 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 Server 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 | Type | Descripción |
---|---|---|
client_id | secuencia | Requerido. La ID de cliente que recibiste de GitHub Enterprise Server para tu App OAuth. |
client_secret | secuencia | Requerido. El secreto del cliente que recibiste de GitHub Enterprise Server para tu App OAuth. |
código | secuencia | Requerido. El código que recibiste como respuesta al Paso 1. |
redirect_uri | secuencia | La URL en tu aplicación, hacia la cual se envía a los usuarios después de su autorización. |
Respuesta
Predeterminadamente, la respuesta toma la siguiente forma:
access_token=e72e16c7e42f292c6912e7710c838347ae178b4a&scope=repo%2Cgist&token_type=bearer
You can also receive the response in different formats if you provide the format in the Accept
header. For example, Accept: application/json
or Accept: application/xml
:
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
:
http://localhost:1234/path
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 de diez tokens que se emite por combinación de usuario/aplicación/alcance. Si una aplicación crea más de 10 tokens para el mismo usuario y los mismos alcances, se revocarán los tokens más antiguos con la misma combinación de usuario/aplicación/alcance.
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".
Solución de problemas
- "Solución de problemas para errores de solicitud de autorización"
- "Solución de problemas para errores de solicitud de tokens de acceso para Apps de OAuth"