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.
Eine ausführlichere Version des Skripts gibt es hier zum Download.
IIS Tracing
Wenn Sie selbst den Webserver betreiben und dies ein IIS ist, dann sollten Sie die Möglichkeit der Protokollierung des HostHeader (cs-host) und des Authentication-Headers kennen. Beide Optionen sind standardmäßig nicht aktiv aber können einfach und schnell im IIS Manager addiert werden
Danach finden Sie im IISLog den Hostheader aber vor allem den Inhalt des Felds "Authentication". Wenn Sie hier nach "Bearer" suchen, finden Sie alle an ihren Webserver gesendeten Anforderungen und können diese sogar decodieren. Für einen Fehlersuche und Analyse der verwendeten Anmeldedaten ist dies sehr nützlich.
Achtung
Schützen Sie den Zugriff auf die Logfiles, denn auch
Anmeldungen per "Basic" können so erfasst und einfach
decodiert werden und auch die Bearer-Tokens können
missbräuchlich verwendet werden.
Weitere Links
- Bearer Decoding
- PowerShell als HTTP-Client
- HTTP Authentication
- Dreimal 401 mit Negotiate
- Get-O365Usage
- Fiddler
-
ConvertFrom-Bearertoken
Bearer Tokens per PowerShell decodieren - 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/ - Parse-JWTToken.ps1
https://www.powershellgallery.com/packages/PSZoom/1.1.0/Content/Private%5CParse-JWTToken.ps1
Im Prinzip ein Base64-Decoder mit Aufschlüsseln der Felder in ein Objekt