使用cURL,我们可以通过HTTP请求传递用户名,如下所示:
$ curl -u <your_username> https://api.github.com/user
-u
标志接受用户名进行身份验证,然后cURL将请求密码。cURL示例用于使用GitHub Api的基本身份验证。
我们如何类似地传递用户名和密码以及调用-WebRequest?最终目标是在PowerShell API中使用基本身份验证来用户GitHub。
发布于 2015-01-14 20:28:38
我在这里假设基本身份验证。
$cred = Get-Credential
Invoke-WebRequest -Uri 'https://whatever' -Credential $cred
您可以通过其他方法(Import-Clixml
等)获得凭据,但它必须是[PSCredential]
对象。
根据评论编辑:
GitHub正在破坏RFC,正如他们在你提供的链接中解释的那样
API支持RFC2617中定义的基本身份验证,但有一些细微的差别。主要的区别是RFC需要使用401个未经授权的响应来回答未经身份验证的请求。在许多地方,这将揭示用户数据的存在。相反,GitHub API的响应是“未找到”。这可能会给假定401个未经授权的响应的HTTP库带来问题。解决方案是手动创建授权头。
据我所知,Powershell的Invoke-WebRequest
在发送凭据之前等待401响应,而且由于GitHub从不提供凭证,所以您的凭据永远不会被发送。
手动构建标头
相反,您必须自己创建基本的auth标头。
基本身份验证采用由用户名和密码组成的字符串,该字符串由冒号user:pass
分隔,然后发送该字符串的Base64编码结果。
这样的代码应该有效:
$user = 'user'
$pass = 'pass'
$pair = "$($user):$($pass)"
$encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($pair))
$basicAuthValue = "Basic $encodedCreds"
$Headers = @{
Authorization = $basicAuthValue
}
Invoke-WebRequest -Uri 'https://whatever' -Headers $Headers
您可以组合一些字符串连接,但我想将其分解以使其更清晰。
发布于 2015-05-13 01:10:08
用这个:
$root = 'REST_SERVICE_URL'
$user = "user"
$pass= "password"
$secpasswd = ConvertTo-SecureString $pass -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($user, $secpasswd)
$result = Invoke-RestMethod $root -Credential $credential
发布于 2020-02-01 22:06:28
如果有人需要一条衬垫:
iwr -Uri 'https://api.github.com/user' -Headers @{ Authorization = "Basic "+ [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes("user:pass")) }
https://stackoverflow.com/questions/27951561
复制相似问题