2017-01-27 2 views
0

ich Powershell ziemlich neu bin und ich versuche, REST Methoden für eine Anwendung zu verwenden, die OAuth2.0 Authentifizierung erfordern.Powershell Invoke-RestMethod schlägt fehl

Ich habe folgendes mit diesen https://msdn.microsoft.com/en-us/library/hh454950.aspx als Referenz geschrieben:

$ClientID = 'david_web' 
$client_Secret = 'Secret_123' 

$Uri = "https://target_server/api/token" 

$Body = "grant_type=password=$ClientID&username=$client_Secret" 

$admAuth=Invoke-RestMethod -Uri $Uri -Body $Body -Method Post 

$HeaderValue = "Bearer " + $admauth 

$uri = "https://target_server/api/v1.0/discovery"; 

$result = Invoke-RestMethod -Uri $uri -Headers @{Authorization = $HeaderValue} 

$result.string.'#text' 

Als ich das laufen erhalte ich:

Invoke-RestMethod: Die zugrunde liegende Verbindung wurde geschlossen: Ein unerwarteter Fehler ist aufgetreten auf einem senden.

Wenn ich versuche, das folgende von Linux:

curl -k -i -X POST -d 'grant_type=password&username=david_web&password=Secret_123' https://target_server/api/token 

Es funktioniert, aber ich muss die Option -k umfassen. Wie mache ich dasselbe bei PowerShell?

Edit:

Laufen gerade dieses:

$ClientID = 'david_web' 
$client_Secret = 'Secret_123' 
$Uri = "https://target_server/api/token" 
$Body = 'grant_type=password&username=$ClientID&password=$client_Secr‌​et'  
$admAuth = Invoke-RestMethod -Method Post -Uri $Uri -Body $Body 

Returns:

[ERROR] Invokenvoke-RestMethod: Die zugrunde liegende Verbindung wurde geschlossen: Ein unerwarteter Fehler ist [ERROR] trat am ein senden. [ERROR] Bei C: \ data \ Visual Studio 2015 \ Projects \ PSDiscovery \ REST \ GetToken.ps1: 34 [ERROR] char: 12 [ERROR] + $ admAuth = Invoke-RestMethod -Methode Beitrag -uri $ Uri - Körper $ Körper [ERROR] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~ [ERROR] + CategoryInfo: InvalidOperation: (System.Net.HttpWebRequest: Htt [ERROR] pWebRequest) [Invoke-RestMethod], WebException [ERROR] + FullyQualifiedErrorId: WebCmdletWebResponseException, Microsoft .PowerShe [ERROR] ll.Commands.InvokeRestMethodCommand

+0

'grant_type = password = $ ClientID & username = $ client_Secret' wird 'grant_type = password = david_web & username = Secret_123', um zu bekommen, was Sie wollen (' grant_type = Kennwort & username = david_web & password = Secret_123') Sie 'grant_type = Passwort & username = $ ClientID & password = $ client_Secret‘ ' –

+0

OK verwenden müssen - ich dies auch versucht haben - bitte oben bearbeiten in der Post sehen. – dross

Antwort

0

Wenn ClientId oder Client_Secret hat Sonderzeichen, UrlEncode vor Anforderung sendet

$ clientIDEncoded = [System.Web.HttpUtility] :: UrlEncode ($ ClientID) $ client_SecretEncoded = [System.Web.HttpUtility] :: UrlEncode ($ client_Secret)

Wie Sie in der Client-Geheimnis unterstreichen haben und Client-ID, sollten Sie sie codieren, bevor Invoke-RestMethod