Mit cURL können wir einen Benutzernamen mit einer HTTP-Webanforderung wie folgt übergeben:
$ curl -u <your_username> https://api.github.com/user
Das -u
Flag akzeptiert einen Benutzernamen zur Authentifizierung, und dann fordert cURL das Kennwort an. Das cURL-Beispiel ist für die Standardauthentifizierung mit der GitHub-API .
Wie übergeben wir in ähnlicher Weise einen Benutzernamen und ein Passwort zusammen mit Invoke-WebRequest? Das ultimative Ziel ist es, PowerShell mit Standardauthentifizierung in der GitHub-API zu verwenden.
powershell
github-api
basic-authentication
Shaun Luttin
quelle
quelle
$pair = "$($user):$($pass)"
Überprüfen Sie die genehmigte Antwort. Ich benutzte das oben genannte und es gab mir zu viel Schmerz-Credential
Ansatz als korrekter Authentifizierungsheader funktioniert, wird bei der Anforderung nicht generiert.Antworten:
Ich gehe hier von einer Standardauthentifizierung aus.
Sie können Ihren Berechtigungsnachweis auf andere Weise (
Import-Clixml
usw.) erhalten, es muss sich jedoch um ein[PSCredential]
Objekt handeln.Bearbeiten basierend auf Kommentaren:
GitHub bricht RFC, wie in dem von Ihnen angegebenen Link erläutert :
Powershell's
Invoke-WebRequest
wartet meines Wissens auf eine 401-Antwort, bevor die Anmeldeinformationen gesendet werden. Da GitHub niemals eine bereitstellt, werden Ihre Anmeldeinformationen niemals gesendet.Erstellen Sie die Header manuell
Stattdessen müssen Sie die grundlegenden Auth-Header selbst erstellen.
Bei der Standardauthentifizierung wird eine Zeichenfolge verwendet, die aus dem durch einen Doppelpunkt getrennten Benutzernamen und dem Kennwort besteht,
user:pass
und anschließend das Base64-codierte Ergebnis gesendet.Code wie dieser sollte funktionieren:
Sie könnten einen Teil der Zeichenfolgenverkettung kombinieren, aber ich wollte sie ausbrechen, um sie klarer zu machen.
quelle
Benutze das:
quelle
Ich musste das tun, damit es funktioniert:
quelle
Invoke-WebRequest
folgt dem RFC2617, wie @briantist feststellt, es gibt jedoch einige Systeme (z. B. JFrog Artifactory), die eine anonyme Verwendung ermöglichen, wenn derAuthorization
Header fehlt, aber mit antworten401 Forbidden
wenn der Header ungültige Anmeldeinformationen enthält.Dies kann verwendet werden, um die
401 Forbidden
Reaktion auszulösen und-Credentials
an die Arbeit zu gehen.Dadurch wird der ungültige Header beim ersten Mal gesendet, der in der zweiten Anforderung durch die gültigen Anmeldeinformationen ersetzt wird, da der Header
-Credentials
überschrieben wirdAuthorization
Header .Getestet mit Powershell 5.1
quelle
Wenn jemand einen Einzeiler brauchen würde:
quelle
Eine andere Möglichkeit ist die Verwendung von certutil.exe. Speichern Sie Ihren Benutzernamen und Ihr Passwort in einer Datei, z. B. in.txt, als Benutzername: Passwort
Jetzt sollten Sie in der Lage sein, den Auth-Wert aus out.txt zu verwenden
quelle
Ich weiß, dass dies ein wenig von der ursprünglichen Anforderung des OP abweicht, aber ich bin darauf gestoßen, als ich nach einer Möglichkeit gesucht habe, Invoke-WebRequest für eine Site zu verwenden, die eine grundlegende Authentifizierung erfordert.
Der Unterschied ist, ich wollte das Passwort nicht im Skript aufzeichnen. Stattdessen wollte ich den Skript-Runner zur Eingabe von Anmeldeinformationen für die Site auffordern.
So habe ich damit umgegangen
Das Ergebnis ist, dass der Skript-Runner mit einem Anmeldedialog für das U / P aufgefordert wird. Invoke-WebRequest kann dann mit diesen Anmeldeinformationen auf die Site zugreifen. Dies funktioniert, da $ Creds.Password bereits eine verschlüsselte Zeichenfolge ist.
Ich hoffe, dies hilft jemandem, der nach einer ähnlichen Lösung für die obige Frage sucht, ohne jedoch den Benutzernamen oder PW im Skript zu speichern
quelle
Dies hat für unsere besondere Situation funktioniert.
Notizen stammen von Wikipedia zu Basic Auth von der Client-Seite . Vielen Dank an @ briantist's Antwort für die Hilfe!
Kombinieren Sie den Benutzernamen und das Passwort zu einer einzigen Zeichenfolge
username:password
Codieren Sie die Zeichenfolge in die RFC2045-MIME-Variante von Base64, außer nicht auf 76 Zeichen / Zeile beschränkt.
Erstellen Sie den Auth-Wert als Methode, Leerzeichen und dann als codiertes Paar
Method Base64String
Erstellen Sie den Header
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Rufen Sie die Webanforderung auf
Die PowerShell-Version ist ausführlicher als die cURL-Version. Warum ist das so? @briantist wies darauf hin, dass GitHub den RFC bricht und PowerShell daran festhält. Bedeutet das, dass cURL auch mit dem Standard bricht?
quelle