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 funktioniert aktuell nur mit PowerShell 6.2.0 oder höher

# Test-bearer
#
# Probe web page for bearer
#
param (
   $url = "https://graph.microsoft.com/v1.0/me"
)

write-host "Test-Bearer: Start"
$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)"
}

if ($result.WwwAuthenticate) {
   Write-Host "Got WWW-Authenticate-Header"
   Write-host "Scheme $($result.WwwAuthenticate.scheme)" 
   foreach ($line in $result.WwwAuthenticate.parameter.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