- Prioriza OAuth de Microsoft Entra; usa PAT o SSH según el contexto y apóyate en Git Credential Manager.
- Gestiona secretos de forma segura: SecureString/Keyfile en PowerShell y secretos en GitHub Actions.
- Automatiza con APIs de Fabric para conectar, actualizar y confirmar cambios, supervisando operaciones LRO.
- Resuelve problemas de autenticación en Azure DevOps corrigiendo GCM, remotos, cachés y configuración de red.
Usar Git desde PowerShell de forma segura no es solo cuestión de comodidad, es un requisito para proteger tu código y tus pipelines. En escenarios con Azure DevOps, GitHub o integraciones con Microsoft Fabric, la autenticación correcta marca la diferencia entre un flujo robusto y uno vulnerable.
En esta guía práctica y exhaustiva repasamos métodos de autenticación recomendados (OAuth de Microsoft Entra, PAT y SSH), el uso del Git Credential Manager, almacenamiento de secretos con PowerShell, secretos en GitHub Actions, automatización con APIs de Fabric y la resolución de problemas típicos de inicio de sesión en Azure DevOps. Todo, con un enfoque en minimizar riesgos y mejorar la productividad.
Métodos de autenticación para Git: OAuth, PAT y claves SSH
El enfoque preferente hoy para Azure Repos/Azure DevOps es usar tokens de Microsoft Entra basados en OAuth 2.0, por su integración empresarial y controles de ámbito. También puedes recurrir a PAT como alternativa y a claves SSH donde resulte más práctico o requerido.
- Tokens OAuth de Microsoft Entra (recomendado): se pueden obtener bajo demanda y usarse tanto con Git como con APIs REST. Desde la CLI de Azure puedes iniciar sesión y recuperar un token de acceso para añadirlo a tus operaciones Git. Por ejemplo, con autenticación de usuario puedes recuperar el token con
az account get-access-token
y aplicarlo a Git mediante un encabezado adicional comohttp.extraheader
con valorAUTHORIZATION: bearer
(usando «bearer» y el token emitido). - Tokens de acceso personal (PAT): son útiles cuando no dispones de SSH o no puedes usar OAuth. Se pueden acotar por permisos y caducidad, reduciendo la exposición. Para usarlos con HTTPS, recuerda que Git pedirá un nombre de usuario (puede ser ficticio) y la contraseña será el PAT. Si necesitas enviar el PAT en un encabezado o cadena, codificar en Base64 es una práctica habitual del lado del cliente cuando el flujo lo requiere.
- Claves SSH: funcionan con un par público/privado generado en tu máquina. La clave pública se asocia a tu cuenta (por ejemplo en Azure DevOps o GitHub) y el servidor cifra la comunicación; tú descifras con la privada local que nunca debe compartirse. SSH es especialmente conveniente si ya usas el agente SSH, si no quieres gestionar PAT en HTTPS o si tu entorno Linux/macOS/Windows (Git para Windows) encaja mejor con claves.
Git Credential Manager: autenticación sin teclear constantemente
ECONOMIA
UNSPLASH
El Git Credential Manager (GCM) guarda y emite tokens bajo demanda para que no tengas que repetir la autenticación en cada operación. Con GCM instalado, inicias sesión una vez y el gestor almacena de forma segura el token (OAuth de Entra preferente o PAT) para su uso con Git y otros clientes.
Buenas prácticas con GCM: cuando cambies de método o detectes conflictos, desinstala configuraciones antiguas del gestor de credenciales y vuelve a configurarlo. Después, revoca o rota credenciales cuando dejen de ser necesarias para respetar el principio de mínimo privilegio.
Trabajar con repositorios existentes: origen, PAT y clonación
Quitar el remoto previo si estaba configurado con un método antiguo (por ejemplo, usuario/contraseña). Puedes eliminar el remoto con git remote remove origin
para evitar choques de credenciales antes de volver a añadirlo.
Volver a añadir el remoto con autenticación vía HTTPS usando PAT puede resolver incidencias de prompt. El remoto se puede expresar en una URL con el PAT embebido en el usuario, o bien usar GCM para no exponer el token en texto. Tras añadir el remoto, empuja las ramas con git push -u origin --all
.
Clonación con Azure DevOps: la ruta de acceso de repos en Azure DevOps incluye el segmento /_git/
. La URL típica de clonación es del estilo https://dev.azure.com/{organization}/{project}/_git/{repository}
, teniendo en cuenta que el nombre real del repo sustituye al marcador correspondiente.
SSH con GitHub: comprobar, generar y asociar claves
GitHub permite autenticación y firma de commits y tags mediante SSH. Antes de añadir una nueva clave, revisa si ya tienes alguna registrada y, si no, genera una nueva y añádela al agente SSH de tu sistema.
Asociar la clave pública a tu cuenta en GitHub.com habilita el acceso SSH. Si quieres usar la misma clave para autenticación y firma, deberás cargarla dos veces, una para cada propósito. Después, puedes reconfigurar un remoto para usar SSH en lugar de HTTPS.
Automatización con Microsoft Fabric: integración de Git por API
- Fabric ofrece APIs REST de integración con Git para CI/CD y operaciones comunes: conectar áreas de trabajo, inicializar conexiones, actualizar desde Git, confirmar cambios masivos o selectivos y supervisar operaciones de larga duración.
- Conexión y actualización de un workspace: tras autenticarte (por ejemplo con
Connect-AzAccount
) y obtener un token conGet-AzAccessToken
, invoca la API de conexión para asociar workspace, repositorio y rama. Luego, inicializa la conexión con la API dedicada; según la respuesta, puede requerirse «UpdateFromGit». - Actualizar desde Git implica construir el cuerpo con el commit remoto y el estado del workspace, ejecutar la llamada y sondear el estado de la operación de larga duración. El servidor devuelve un identificador de operación y un intervalo de reintentos, que puedes consultar de forma periódica hasta su finalización.
- Otras operaciones por API: confirmar todos los cambios del workspace, confirmar de forma selectiva solo ciertos elementos tras consultar el estado, y sondear operaciones LRO obteniendo el operationId de las llamadas previas para consultar el avance.
- Conexiones de credenciales para el proveedor Git: muchas llamadas requieren un connectionId. Puedes crear una conexión nueva que almacene un PAT de GitHub como credencial (limitándolo opcionalmente a un repositorio concreto) o listar conexiones existentes para reutilizar su id. Estos endpoints devuelven propiedades como displayName, path, credentialType y otros metadatos.
- Limitaciones a considerar: la integración vía API hereda restricciones de la UI, la autenticación de entidad de servicio se admite solo para GitHub y ciertos modelos semánticos pueden aparecer con diffs tras actualizaciones mejoradas.
Guardar credenciales de forma segura con PowerShell
PowerShell permite cifrar contraseñas y secretos y guardarlos en disco para su consumo posterior en scripts. Con Read-Host -AsSecureString
puedes capturar una credencial segura y con ConvertFrom-SecureString
serializarla cifrada a un archivo válido solo para el mismo usuario y equipo.
- Uso con el mismo usuario: la cadena cifrada guardada con
ConvertFrom-SecureString
solo puede descifrarse por el usuario que la generó. Para leerla de vuelta en un script, aplicaGet-Content
yConvertTo-SecureString
para reconstruir el objeto seguro en memoria. - Keyfile portable: si necesitas que otros usuarios o máquinas puedan descifrar el secreto, genera una clave simétrica (por ejemplo con
RNGCryptoServiceProvider
) y úsala conConvertFrom-SecureString -Key
. Guardas la clave en un archivo y más tarde, recompones el SecureString conConvertTo-SecureString -Key
usando el mismo keyfile. - Crear un PSCredential a partir del secreto leído es directo: combinas el usuario y el
SecureString
enNew-Object System.Management.Automation.PSCredential
. Así parametrizas usuario y contraseña sin exponer texto claro en el script. - Higiene de memoria: aunque
SecureString
aísla la cadena, hay casos donde la transformas a texto para interoperar. Si lo haces, libera la memoria del puntero conZeroFreeCoTaskMemUnicode
tras usarSecureStringToBSTR
yPtrToStringUni
, evitando residuos en memoria.
Redactor apasionado del mundo de los bytes y la tecnología en general. Me encanta compartir mis conocimientos a través de la escritura, y eso es lo que haré en este blog, mostrarte todo lo más interesante sobre gadgets, software, hardware, tendencias tecnológicas, y más. Mi objetivo es ayudarte a navegar por el mundo digital de forma sencilla y entretenida.