Cuando la API proporciona varios métodos de autenticación, te recomendamos fuertemente utilizar OAuth para las aplicaciones productivas. Los otros métodos que se proporcionan tienen la intención de que se utilicen para scripts o para pruebas (por ejemplo, en los casos en donde utilizar todo el OAuth sería exagerado). Las aplicaciones de terceros que dependen de GitHub Enterprise Server para la autenticación no deben pedir o recolectar credenciales de GitHub Enterprise Server. En vez de esto, deben utilizar el flujo web de OAuth.
Autenticación Básica
La API es compatible con la autenticación básica de acuerdo a lo que se define en el RFC2617 con algunas diferencias menores. La diferencia principal es que el RFC requiere de solicitudes sin autenticar para que se le den respuestas 401 Unauthorized
. En muchos lugares, esto divulgaría la existencia de los datos de los usuarios. En cambio, la API de GitHub Enterprise Server responde con un 404 Not Found
. Esto puede causar problemas para las bibliotecas de HTTP que asumen una respuesta de 401 Unauthorized
. La solución es construir manualmente el encabezado de Authorization
.
A través de OAuth y los tokens de acceso personal
Te recomendamos utilizar tokens de OAuth para autenticarte en la API de GitHub. Los tokens de OAuth incluyen a los tokens de acceso personal y habilitan al usuario para revocar el acceso en cualquier momento.
$ curl -u username:token http(s)://[hostname]/api/v3/user
Este acercamiento es útil si tus herramientas solo son compatibles con la Autenticación Básica pero quieres sacar ventaja de las características de seguridad de los tokens de acceso de OAuth.
A través de nombre de usuario y contraseña
Para utilizar la autenticación básica con la API de GitHub Enterprise Server, simplemente envía el nombre de usuario y contraseña asociados con la cuenta.
Por ejemplo, si estás accediendo a la API a través de cURL, el siguiente comando te autenticaría si lo reemplazas al <username>
con tu nombre de usuario de GitHub Enterprise Server. (cURL te pedirá ingresar la contraseña.)
$ curl -u username http(s)://[hostname]/api/v3/user
Si habilitaste la autenticación de dos factores, asegúrate de que entiendes como trabajar con ella.
Trabajar con la autenticación de dos factores
Cuando tienes la autenticación bifactorial habilitada, la Autenticación Básica para la mayoría de las terminales en la API de REST requiere que utilices un token de acceso personal o un token de OAuth en vez de tu nombre de usuario y contraseña.
Puedes generar un token de acceso personal o con la terminal de "[Crear una autorización nueva][/rest/reference/oauth-authorizations#create-a-new-authorization]" en la API de autorizciones de OAuth para generar un token de OAuth nuevo. Para obtener más información, consulta la sección"Crear un token de acceso personal para la línea de comandos". Entonces, utilizarías estos tokens para autenticarte utilizando un token de OAuth con la API de GitHub. La única ocasión en la que necesitas autenticarte con tu nombre de usuario y contraseña es cuando creas tu token de OAuth o cuando utilizas la API de autorizaciones de OAuth.
Utilizar la API de Autorizaciones de OAuth con autenticación de dos factores
Cuando haces llamadas a la API de Autorizaciones de OAuth, la Autenticación Básica requiere que utilces una contraseña de única vez (OTP) así como tu nombre de usuario y contraseña en vez de utilizar tokens. Cuando intentas autenticarte con la API de Autorizaciones de OAuth, el servidor te responderá con un 401 Unauthorized
y con uno de estos encabezados para decirte que necesitas un código de autenticación de dos factores:
X-GitHub-OTP: required; SMS
or X-GitHub-OTP: required; app
.
Este encabezado te dice cómo tu cuenta recibe sus códigos de autenticación de dos factores. Dependiendo de cómo configures tu cuenta, podrías recibir tus códigos de OTP por SMS o utilizarías una aplicación tal como Google Autenticator o como 1Password. Para obtener más información, consulta "Configurar autenticación de dos factores". Passa la OTP en el encabezado:
$ curl --request POST \
--url https://api.github.com/authorizations \
--header 'authorization: Basic PASSWORD' \
--header 'content-type: application/json' \
--header 'x-github-otp: OTP' \
--data '{"scopes": ["public_repo"], "note": "test"}'