Com cURL, podemos passar um nome de usuário com uma solicitação da Web HTTP da seguinte maneira:
$ curl -u <your_username> https://api.github.com/user
A -u
bandeira aceita um nome de usuário para autenticação e, em seguida, o cURL solicitará a senha. O exemplo cURL é para autenticação básica com a API do GitHub .
Como passamos da mesma forma um nome de usuário e senha junto com Invoke-WebRequest? O objetivo final é o usuário do PowerShell com autenticação básica na API do GitHub.
powershell
github-api
basic-authentication
Shaun Luttin
fonte
fonte
$pair = "$($user):$($pass)"
Verifique a resposta aprovada. Eu estava usando o exposto, e isso me deu muita dor-Credential
abordagem funciona como o cabeçalho de autenticação correto não é gerada quando a solicitação é feita.Respostas:
Estou assumindo autenticação básica aqui.
Você pode obter sua credencial por outros meios (
Import-Clixml
, etc.), mas ela precisa ser um[PSCredential]
objeto.Edite com base nos comentários:
O GitHub está quebrando o RFC, conforme explicado no link que você forneceu :
Pelo que sei, o Powershell's
Invoke-WebRequest
espera uma resposta 401 antes de enviar as credenciais, e como o GitHub nunca fornece uma, suas credenciais nunca serão enviadas.Crie manualmente os cabeçalhos
Em vez disso, você precisará criar os cabeçalhos de autenticação básicos.
A autenticação básica utiliza uma sequência que consiste no nome de usuário e na senha separados por dois pontos
user:pass
e envia o resultado codificado em Base64.Código como este deve funcionar:
Você poderia combinar parte da concatenação de cadeias, mas eu queria quebrá-la para torná-la mais clara.
fonte
Usa isto:
fonte
Eu tive que fazer isso para fazê-lo funcionar:
fonte
Invoke-WebRequest
segue o RFC2617 como observou o @briantist, no entanto, existem alguns sistemas (por exemplo, JFrog Artifactory) que permitem o uso anônimo se oAuthorization
cabeçalho estiver ausente, mas responderão401 Forbidden
se o cabeçalho contiver credenciais inválidas.Isso pode ser usado para acionar a
401 Forbidden
resposta e começar-Credentials
a trabalhar.Isso enviará o cabeçalho inválido na primeira vez, que será substituído pelas credenciais válidas na segunda solicitação, uma vez que
-Credentials
substitui oAuthorization
cabeçalho.Testado com o PowerShell 5.1
fonte
Se alguém precisaria de um forro:
fonte
outra maneira é usar certutil.exe, salve seu nome de usuário e senha em um arquivo, por exemplo, in.txt como nome de usuário: senha
Agora você deve poder usar o valor de autenticação de out.txt
fonte
Sei que isso está um pouco fora da solicitação original dos OPs, mas me deparei com isso enquanto procurava uma maneira de usar o Invoke-WebRequest em um site que requer autenticação básica.
A diferença é que eu não queria gravar a senha no script. Em vez disso, eu queria solicitar credenciais ao gerenciador de scripts para o site.
Aqui está como eu lidei com isso
O resultado é que o script script é solicitado com uma caixa de diálogo de logon para a U / P; Invoke-WebRequest pode acessar o site com essas credenciais. Isso funciona porque $ Creds.Password já é uma sequência criptografada.
Espero que isso ajude alguém a procurar uma solução semelhante à pergunta acima, mas sem salvar o nome de usuário ou o PW no script
fonte
Foi isso que funcionou para a nossa situação particular.
As anotações são da Wikipedia sobre autenticação básica do lado do cliente . Obrigado à resposta do @ briantist pela ajuda!
Combine o nome de usuário e a senha em uma única sequência
username:password
Codifique a string para a variante RFC2045-MIME da Base64, exceto não se limitando a 76 caracteres / linha.
Crie o valor Auth como o método, um espaço e, em seguida, o par codificado
Method Base64String
Crie o cabeçalho
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Invocar a solicitação da web
A versão do PowerShell é mais detalhada que a versão cURL. Por que é que? O @briantist apontou que o GitHub está quebrando o RFC e o PowerShell está aderindo a ele. Isso significa que o cURL também está rompendo com o padrão?
fonte