С помощью cURL мы можем передать имя пользователя с помощью веб-запроса HTTP следующим образом:
$ curl -u <your_username> https://api.github.com/user
-u
Флаг принимает имя пользователя для аутентификации, а затем Curl будет запрашивать пароль. Пример cURL предназначен для базовой аутентификации с помощью GitHub Api .
Как мы аналогичным образом передаем имя пользователя и пароль вместе с Invoke-WebRequest? Конечная цель - использовать PowerShell с базовой аутентификацией в API GitHub.
powershell
github-api
basic-authentication
Шон Латтин
источник
источник
$pair = "$($user):$($pass)"
Проверить утвержденный ответ. Я использовал вышеупомянутое, и это доставляло мне слишком много боли-Credential
подход, не работает, поскольку правильный заголовок аутентификации не создается при выполнении запроса.Ответы:
Я предполагаю здесь базовую аутентификацию.
Вы можете получить свои учетные данные другими способами (
Import-Clixml
и т. Д.), Но это должен быть[PSCredential]
объект.Редактировать на основе комментариев:
GitHub нарушает RFC, как они объясняют в предоставленной вами ссылке :
Powershell,
Invoke-WebRequest
насколько мне известно, ожидает ответа 401 перед отправкой учетных данных, и поскольку GitHub никогда не предоставляет его, ваши учетные данные никогда не будут отправлены.Создайте заголовки вручную
Вместо этого вам придется самостоятельно создавать основные заголовки аутентификации.
Обычная проверка подлинности принимает строку, состоящую из имени пользователя и пароля, разделенных двоеточием,
user:pass
и затем отправляет результат в кодировке Base64.Такой код должен работать:
Вы можете объединить некоторые конкатенации строк, но я хотел разбить их, чтобы было понятнее.
источник
Использовать это:
источник
Мне пришлось сделать это, чтобы заставить его работать:
источник
Invoke-WebRequest
следует RFC2617, как отметил @briantist, однако есть некоторые системы (например, JFrog Artifactory), которые позволяют анонимное использование, еслиAuthorization
заголовок отсутствует, но будут отвечать,401 Forbidden
если заголовок содержит недопустимые учетные данные.Это можно использовать, чтобы вызвать
401 Forbidden
реакцию и приступить-Credentials
к работе.Это отправит неверный заголовок в первый раз, который будет заменен действительными учетными данными во втором запросе, поскольку
-Credentials
переопределяетAuthorization
заголовок.Протестировано с Powershell 5.1
источник
Если кому-то понадобится один лайнер:
источник
Другой способ - использовать certutil.exe, сохранить ваше имя пользователя и пароль в файле, например, in.txt как имя пользователя: пароль
Теперь вы можете использовать значение аутентификации из out.txt.
источник
Я знаю, что это немного отличается от исходного запроса OP, но я столкнулся с этим, когда искал способ использовать Invoke-WebRequest на сайте, требующем базовой аутентификации.
Разница в том, что я не хотел записывать пароль в скрипт. Вместо этого я хотел запросить у исполнителя сценария учетные данные для сайта.
Вот как я с этим справился
В результате исполнителю сценария предлагается диалоговое окно входа в систему для U / P, после чего Invoke-WebRequest может получить доступ к сайту с этими учетными данными. Это работает, потому что $ Creds.Password уже является зашифрованной строкой.
Надеюсь, это поможет кому-то, кто ищет аналогичное решение для вышеуказанного вопроса, но без сохранения имени пользователя или PW в скрипте.
источник
Это то, что сработало в нашей конкретной ситуации.
Примечания взяты из Википедии о базовой аутентификации на стороне клиента . Спасибо ответу @briantist за помощь!
Объедините имя пользователя и пароль в одну строку
username:password
Кодируйте строку в RFC2045-MIME вариант Base64, за исключением 76 символов на строку.
Создайте значение Auth как метод, пробел, а затем закодированную пару
Method Base64String
Создайте заголовок
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Вызвать веб-запрос
Версия PowerShell более подробна, чем версия cURL. Это почему? @briantist указал, что GitHub нарушает RFC, а PowerShell придерживается его. Означает ли это, что cURL также нарушает стандарт?
источник