2017-02-03 5 views
2

Wie kann ich ein sicheres Passwort eingeben und speichern? Ich muss es von Secure konvertieren, um es in JSON zu integrieren, um ein REST-Token zu erhalten.Umgang mit PowerShell Secure Strings

Mein Beispiel ist:

PS C: \ Temp> $ secpass = Read-Host -assecurestring "Bitte geben Sie das Kennwort";

Bitte Passwort eingeben: *****

PS C: \ Temp> echo secpass $

System.Security.SecureString

PS C: \ Temp> $ pass = ConvertFrom -SecureString $ secpass

PS C: \ Temp> Echo passieren $ 01000000d08c9ddf0115d1118c7a00c04fc297eb010000004fe37b5a39a93542a74298c3740cae0b0000000002000000000003660000c00000001000000096aa9947681adf56ce6f9fd2d9ced214000000000 4800000a0000000100000006bbff8b1e2115682e9be4c775d8372ee10000000b80a4a99147901275a9080c257712b1914000000010eabc8c134837751dbd2d648dbbca1f7335e9f

PS C: \ Temp>

Ich will wieder den ConvertFrom-Secure und mein einfaches Klartext-Passwort laufen.

BEARBEITEN;

Ich habe die folgende Funktion, die ein REST-Token erhält:

function Get-AuthToken { 
    Param(
     [string]$server, 
     [string]$username, 
     [securestring]$password 
    ) 

     $creds = @{ 
     username = $username 
     password = $password 
     grant_type = "password" 
     }; 

    Invoke-RestMethod -Method Post "$server/api/token" -Body $creds 

} 

$ creds Zum Aufbau richtig das Passwort muss im Klartext sein.

Außerdem habe ich auch die nach dem Fall, in der Passwort-String zu decken ist nicht gegeben, wenn das Skript ausgeführt wird:

If(!$Password) { 
      [ValidatePattern("\w+")]$password = Read-Host -assecurestring "Please enter password"; 
      } 

Per erster hier Convert a secure string to plain text gegeben Antwort, die ich versucht habe folgende hinzuzufügen, bevor der anruf Get-authToken Funktion:

$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($Password) 
$unsecurePassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) 
$response = Get-AuthToken -username $User -password $unsecurePassword -server $server 

Wenn ich einen Write-Host $ unsecurePassword tun kann ich die richtige Zeichenfolge sehen jedoch die Get-authToken schlägt die Authentifizierung fehl.

EDIT 2:

Wenn ich die Funktion zu ändern:

function Get-AuthToken { 
     Param(
      [string]$server, 
      [string]$username, 
      [string]$password 
     ) 

      $creds = @{ 
      username = $username 
      password = $password 
      grant_type = "password" 
      }; 

     Invoke-RestMethod -Method Post "$server/api/token" -Body $creds 

    } 

, die das $ password Parameter eine Zeichenfolge anstatt eine sichere Zeichenfolge macht dann funktioniert es aber nicht glauben, dies am besten ist Übung seit Visual Studio Code sich beschweren.

+0

https://blogs.technet.microsoft.com/heyscriptingguy/2013/03/26/decrypt-powershell-secure-string-password/ –

Antwort

0

Es ist nicht für Produktionssysteme empfohlen, aber versuchen Sie dies:

$secpass = Read-Host -assecurestring "Please enter password" 
$credentials = New-Object System.Net.NetworkCredential("UserTest", $secpass, "Domain") 
$credentials.Password 

Sie können nicht tun, mit ConvertFrom-Secure

+0

'Ich möchte die ConvertFrom-SecureString ausführen und meine einfache Klartext-Passwort zurück. ' – 4c74356b41

+0

@Shmukko - Nicht sicher, ich möchte tun wenn es nicht für ein Produktionssystem geeignet ist. Siehe meine Bearbeitung oben für weitere Details. – dross