Con cURL, podemos pasar un nombre de usuario con una solicitud web HTTP de la siguiente manera:
$ curl -u <your_username> https://api.github.com/user
La -u
bandera acepta un nombre de usuario para la autenticación, y luego cURL solicitará la contraseña. El ejemplo de cURL es para la autenticación básica con la API de GitHub .
¿Cómo pasamos de manera similar un nombre de usuario y contraseña junto con Invoke-WebRequest? El objetivo final es usar PowerShell con autenticación básica en la API de GitHub.
powershell
github-api
basic-authentication
Shaun Luttin
fuente
fuente
$pair = "$($user):$($pass)"
Compruebe la respuesta aprobada. Estaba usando lo anterior y me dio demasiado dolor-Credential
enfoque funcione como el encabezado de autenticación correcto no se genera cuando se realiza la solicitud.Respuestas:
Estoy asumiendo la autenticación básica aquí.
Puede obtener su credencial a través de otros medios (
Import-Clixml
, etc.), pero tiene que ser un[PSCredential]
objeto.Editar basado en comentarios:
GitHub está rompiendo RFC como explican en el enlace que proporcionó :
Powershell,
Invoke-WebRequest
según mi conocimiento, espera una respuesta 401 antes de enviar las credenciales, y dado que GitHub nunca proporciona una, sus credenciales nunca se enviarán.Construir manualmente los encabezados
En su lugar, deberá crear los encabezados de autenticación básicos usted mismo.
La autenticación básica toma una cadena que consiste en el nombre de usuario y la contraseña separados por dos puntos
user:pass
y luego envía el resultado codificado en Base64 de eso.Un código como este debería funcionar:
Podrías combinar algunas de las concatenaciones de cuerdas, pero quería separarlas para aclararlas.
fuente
Utilizar este:
fuente
Tuve que hacer esto para que funcione:
fuente
Invoke-WebRequest
sigue el RFC2617 como señaló @briantist, sin embargo, hay algunos sistemas (por ejemplo, JFrog Artifactory) que permiten el uso anónimo si elAuthorization
encabezado está ausente, pero responderán401 Forbidden
si el encabezado contiene credenciales no válidas.Esto se puede utilizar para activar la
401 Forbidden
respuesta y ponerse-Credentials
a trabajar.Esto enviará el encabezado no válido la primera vez, que se reemplazará con las credenciales válidas en la segunda solicitud, ya que
-Credentials
anula elAuthorization
encabezado.Probado con Powershell 5.1
fuente
Si alguien necesitara un trazador de líneas:
fuente
otra forma es usar certutil.exe, guarde su nombre de usuario y contraseña en un archivo, por ejemplo, in.txt como nombre de usuario: contraseña
Ahora debería poder usar el valor de autenticación de out.txt
fuente
Sé que esto está un poco fuera de la solicitud original de los OP, pero me encontré con esto mientras buscaba una forma de usar Invoke-WebRequest en un sitio que requiere autenticación básica.
La diferencia es que no quería registrar la contraseña en el script. En cambio, quería solicitar al creador de guiones las credenciales para el sitio.
Así es como lo manejé
El resultado es que se le solicita al corredor de secuencias de comandos un cuadro de diálogo de inicio de sesión para U / P y luego, Invoke-WebRequest puede acceder al sitio con esas credenciales. Esto funciona porque $ Creds.Password ya es una cadena encriptada.
Espero que esto ayude a alguien que busque una solución similar a la pregunta anterior pero sin guardar el nombre de usuario o PW en el script
fuente
Esto es lo que funcionó para nuestra situación particular.
Las notas son de Wikipedia sobre autenticación básica del lado del cliente . ¡Gracias a la respuesta de @briantist por la ayuda!
Combina el nombre de usuario y la contraseña en una sola cadena
username:password
Codifique la cadena a la variante RFC2045-MIME de Base64, excepto que no se limita a 76 caracteres / línea.
Cree el valor de Auth como método, un espacio y luego el par codificado
Method Base64String
Crea el encabezado
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Invocar la solicitud web
La versión de PowerShell de esto es más detallada que la versión cURL. ¿Porqué es eso? @briantist señaló que GitHub está rompiendo el RFC y PowerShell se apega a él. ¿Eso significa que cURL también está rompiendo con el estándar?
fuente