Test-Bearer
Im Rahmen meiner Tests um OAUTH u.a. habe ich mit ein kleines Skript gebaut, welches eine HTTP-Url mit Bearer-Authentication aufruft und die Antwort auswertet. Es war erst etwas kniffliger da die PowerShell-Commandlets den HTTP 401-Fehler abfangen und eine Exception werfen:
Die eigentliche Antwort kommt gar nicht in der Variable "$result" an. Das funktioniert also nur mit einer Try/Catch-Konstruktion.
Hinweis: Das Skript wurde mit PS7 getestet. PS2 kennt die Exception "[Microsoft.PowerShell.Commands.HttpResponseException]" z.B. nicht
# Test-bearer # # Probe web page for bearer # param ( $url = "https://graph.microsoft.com/v1.0/me" ) write-host "Test-Bearer: Start" write-host "URL: $($url)" $HeaderParams = @{ 'Authorization' = "Bearer" } try { write-host "Test-Bearer: Start Request with Bearer Header" $result = Invoke-WebRequest -UseBasicParsing -Headers $HeaderParams -Uri $url write-host "Got not error. Bearer not working " } catch [Microsoft.PowerShell.Commands.HttpResponseException] { write-host "Error $($_.Exception.message)" $result=$_.Exception.Response.headers } catch { write-host "Error $($_.Exception.message)" } $WwwAuthenticate= $result | where-object {$_.key -eq "WWW-Authenticate"} if ($WwwAuthenticate) { Write-Host "Got WWW-Authenticate-Header" foreach ($line in $WwwAuthenticate.value.split(", ")) { Write-host $line } }
Dann erhalte ich aber die gewünschten Informationen, wenn die Gegenseite mit "Bearer" etwas anfangen kann:
Auch im Fiddler sind die Daten gut zu sehen
Dieser Webserver unterstützt also OAUTH.
Weitere Links
- Bearer Decoding
- PowerShell als HTTP-Client
- HTTP Authentication
- Dreimal 401 mit Negotiate
- Get-O365Usage
- Fiddler
- Invoke-RestMethod does not return
response headers #9769
https://GitHub.com/PowerShell/PowerShell/issues/9769 - Using Try and Catch with PowerShell’s
Invoke-WebRequest
http://wahlnetwork.com/2015/02/19/using-try-catch-powershells-invoke-webrequest/ - Making better REST calls – Powershell
https://zeleskitech.com/2016/09/23/making-better-rest-calls-powershell/ - HTTP Status Codes
https://www.restapitutorial.com/httpstatuscodes.html - HTTP requests with PowerShell’s
Invoke-WebRequest – by Example
https://davidhamann.de/2019/04/12/powershell-invoke-webrequest-by-example/