Use Invoke-WebRequest con un nombre de usuario y contraseña para la autenticación básica en la API de GitHub

Pregunta inicial

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

los-u flag acepta un nombre de usuario para la autenticación, y luego cURL solicitará la contraseña. El ejemplo de cURL es paraAutenticació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.

Editar (Esto es lo que funcionó)

Las notas son deWikipedia sobre autenticación básica desde el lado del cliente.

Combina el nombre de usuario y la contraseña en una sola cadenausername:password

$user = "shaunluttin"
$pass = "super-strong-alpha-numeric-symbolic-long-password"
$pair = "${user}:${pass}"

Codifique la cadena a la variante RFC2045-MIME de Base64, excepto que no se limita a 76 caracteres / línea.

$bytes = [System.Text.Encoding]::ASCII.GetBytes($pair)
$base64 = [System.Convert]::ToBase64String($bytes)

Cree el valor de Auth como método, un espacio y luego el par codificadoMethod Base64String

$basicAuthValue = "Basic $base64"

Crea el encabezadoAuthorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

$headers = @{ Authorization = $basicAuthValue }

Invocar la solicitud web

Invoke-WebRequest -uri "https://api.github.com/user" -Headers $headers

¡Gracias a @briantist por la ayuda!

Discusión

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?

Respuestas a la pregunta(5)

Su respuesta a la pregunta