Начальный вопрос
С помощью cURL мы можем передать имя пользователя с веб-запросом HTTP следующим образом:
$ curl -u <your_username> https://api.github.com/user
Флаг -u
принимает имя пользователя для аутентификации, а затем cURL запрашивает пароль. Пример cURL для Базовая аутентификация с помощью GitHub Api.
Как мы также передаем имя пользователя и пароль вместе с Invoke-WebRequest? Конечной целью является пользователь PowerShell с базовой аутентификацией в API GitHub.
Изменить (это то, что работает)
Заметки из Wikipedia на Basic Auth с клиентской стороны.
Объедините имя пользователя и пароль в одну строку username:password
$user = "shaunluttin"
$pass = "super-strong-alpha-numeric-symbolic-long-password"
$pair = "${user}:${pass}"
Кодировать строку в RFC2045-MIME-вариант Base64, за исключением, не ограничиваясь этим, 76 char/line.
$bytes = [System.Text.Encoding]::ASCII.GetBytes($pair)
$base64 = [System.Convert]::ToBase64String($bytes)
Создайте значение Auth как метод, пробел, а затем закодированную пару Method Base64String
$basicAuthValue = "Basic $base64"
Создайте заголовок Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
$headers = @{ Authorization = $basicAuthValue }
Вызовите веб-запрос
Invoke-WebRequest -uri "https://api.github.com/user" -Headers $headers
Спасибо @briantist за помощь!
Обсуждение
Версия PowerShell более сложная, чем версия cURL. Почему это? @briantist отметил, что GitHub нарушает RFC, и PowerShell придерживается этого. Означает ли это, что cURL также нарушает стандарт?