简体   繁体   中英

Jira Rest Api Basic Auth Token - PowerShell - Building with secure strings

I've been trying to build out basic auth tokens using powershell user persistent variables where I store the password as a secure string. This is what I have so far:

$PlainPassword = "atestpassword"

$SecurePassword = $PlainPassword | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString
[Environment]::SetEnvironmentVariable('JiraCreds', $SecurePassword, "User")


$cred = New-Object pscredential "TestUser", (ConvertTo-SecureString $env:JiraCreds)
$newPassword = $cred.Password

#NOTE: This returns 403 forbidden when making rest api calls with the basic auth token
$header = @{"Authorization" = "Basic "+[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("TestUser:$(ConvertFrom-SecureString $newPassword)"))}

#NOTE: Using this returns a 401 unauthorized when using this for get/post rest api calls with the basic auth token
$header = @{Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("TestUser:$(ConvertFrom-SecureString $newPassword)"))}

The issue I've been running into all along is that I'm not sure how to adjust the code to properly translate the securestring in a way that builds the basic auth token correctly. One thing I noticed is that the actual/resulting basic auth tokens using the two methods above are much longer than what they should be and are not in the right token format compared to the following method:

$header = @{Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("TestUser:atestpassword "))}

I've even tested the basic auth tokens in postman and they are failing there too.

NOTE: I have confirmed the json and the jira endpoint as well as method are working by testing with a basic auth method that does work in PowerShell.

Any help with this would be greatly appreciated.

To retrieve the plain-text password from a [pscredential] instance, use .GetNetworkCredential().Password :

$newPassword = $cred.GetNetworkCredential().Password

In the context of your command:

$header = @{
  Authorization = 'Basic ' +         
   [Convert]::ToBase64String(
     [Text.Encoding]::UTF8.GetBytes("$($cred.UserName):$newPassword")
   )
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM