Как аутентифицировать Invoke-RestMethod для вывода списка артефактных репозиториев - PullRequest
1 голос
/ 20 февраля 2020

Попытка получить список репозиториев из экземпляра Artifactory Enterprise v6, используя PowerShell 5.1 Invoke-RestMethod с рабочего стола Win10, но не видит, как его аутентифицировать.

Кажется достаточно простым, но этот

$myCred = Get-Credential notStanley
$lstART = Invoke-RestMethod -URI https://<myserver>/artifactory/api/repositories -Credential $myCred

возвращает только те элементы, которые разрешают анонимный доступ.

Если я открою браузер и войду в этот экземпляр Artifactory, я смогу затем вставьте указанный выше URI и получите полный список всех репозиториев, к которым у моей учетной записи есть доступ.

Есть какие-либо подсказки, что отсутствует $myCred?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2020

Спасибо, Джавад. Это заставило меня работать с API (моя первая попытка была сформирована не совсем правильно). По вашим ссылкам я нашел еще пару вопросов (27951561 и 60325084), которые также помогли мне получить учетные данные. Я пошел с Credential, чтобы избежать суеты с запутыванием ключа API в исходном коде.

Мой базовый скелет теперь выглядит так:

# get standard PowerShell credential
$myCred  = Get-Credential -Message "just <name> for this server, not '<domain>\<name>'"

# format credential for Artifactory API
$credUser    = $myCred.UserName                                   # extract user name
$credPswd    = $myCred.GetNetworkCredential().password            # extract user password
$credPair    = "${credUser}:${credPswd}"                          # concatenate into BasicAuth format
$credBytes   = [System.Text.Encoding]::ASCII.GetBytes($credPair)  # convert byte values to text
$cred64      = [System.Convert]::ToBase64String($credBytes)       # condense a bit more secure string RFC2045-MIME    
$credAuth    = "Basic $cred64"                                    # intermediate formatting 
$restHeaders = @{ Authorization = $credAuth }                     # initialize web headers

# clear collection array
$cfgSite = @()

# locate server
$lstURL "https://<myserver>/artifactory/api/repositories"

# get list of repositories
$theseRepo = Invoke-RestMethod -Headers $restHeaders -Uri $lstURL 

# collect each configuration
ForEach ($thisRepo in $theseRepo)
   {
   $thisURI  = $lstURL + $thisRepo.key
   $thisCfg  = Invoke-RestMethod -Headers $restHeaders -Uri $thisURI    
   $thisCfg  | Add-Member -NotePropertyName "SITE" -NotePropertyValue "$thisSite"     
   $cfgSite += $thisCfg
   }

# output to file
$cfgAll | Export-Csv .\lstArtRepoConf.csv -NoTypeInformation   
0 голосов
/ 20 февраля 2020

Я пытался в прошлом с артефактом, и -Credential действительно не работает для меня.

Я попробовал способ API, который намного проще и проще в использовании.

Подключение к Artifactory с помощью ключа API

Читать здесь , чтобы узнать, как получить ключ API для своей учетной записи на артефакте.

$header = @{"X-JFrog-Art-Api" = "yourAPIKey"}
Invoke-RestMethod -URI https://<myserver>/artifactory/api/repositories -Headers $header

Использование Basi c Auth и -Credential

Если вы вы хотите работать с приглашением Get-Credential, убедитесь, что вы используете имя пользователя, которое работает в Artifactory. Это не то же самое, что домен \ пользователь. отсюда

$login = Get-Credential -Message "Enter Credentials for Artifactory"

#invalid creds.. but its ok. Need to tell invoke-restmethod to use Basic Auth.
$headers = @{ Authorization = "Basic Zm9vOmJhcg==" }  

# use -Credential to override the credentials.
$new = Invoke-RestMethod -URI https://<server>/artifactory/api/repositories -Headers $headers -Credential $login

...