4
votes

En-tête d'autorisation Powershell Invoke-RestMethod

Lors de l'appel d'un Invoke-RestMethod en utilisant Powershell comme:

$headers = @{
    Authorization="Secret $username $password"
    Content='application/json'
}

et $ headers étant

Invoke-RestMethod -Method Get -Uri "https://google.com/api/GetData" -Headers $headers

Quel est le format attendu pour les paramètres $ username et $password?


0 commentaires

3 Réponses :


3
votes

Pour autant que je sache, vous devez envoyer un jeton OAuth2 dans les en-têtes de la requête.

$headers = @{
    Authorization="Bearer $token"
}

Peut-être que le billet de blog suivant vous donne une idée de la façon de procéder. https://lazyadmin.nl/it/connect-to-google -api-avec-powershell /


0 commentaires

0
votes

La solution fournie par Rufer7 est correcte. Je veux juste ajouter une chose que vous pouvez également passer le paramètre de contenu dans la méthode Invoke-WebRequest en gardant l'en-tête plus simple comme celui-ci et en obtenant la sortie au format Json. Donc, mon script raffiné ressemblera à ceci.

Script PowerShell:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12


$headers = @{
    Authorization="Bearer $token"
}

$responseData = (Invoke-WebRequest -Uri $Url -Method Get -Headers $headers -UseBasicParsing -ContentType "application/json").Content | ConvertFrom-Json | ConvertTo-Json

La première ligne est facultative uniquement si vous observez cette erreur Sinon, vous pouvez l'ignorer.

"Invoke-WebRequest: La requête a été abandonnée: impossible de créer un canal sécurisé SSL / TLS."


0 commentaires

0
votes

Dans mon scénario, j'ai utilisé username et password dans le corps de l'appel d'API REST. Mon corps est:

Invoke-RestMethod -Method Get -Uri "https://google.com/api/GetData" -ContentType application/json -Body $body

Dans la fonction, j'utilise la classe PSCredential:

[System.Management.Automation.PSCredential]
[System.Management.Automation.Credential()]
$Credential = [System.Management.Automation.PSCredential]::Empty,

Finalement, je l'appelle ainsi:

$body = [PSCustomObject] @{
  username=$Credential.UserName; 
  password=$Credential.GetNetworkCredential().Password;
} | ConvertTo-Json

Le ContentType est défini, car j'attends JSON en réponse.


0 commentaires