Powershell Invoke-WebRequest не работает с токеном - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь выполнить API-шаблон ANSILE ANSID для проверки правильности заданного идентификатора шаблона. Тем не менее, я всегда получаю неавторизованный код состояния. Я генерирую токен из ответной башни и отправляю его на следующий веб-запрос. Ниже приведен снимок кода того, что я пытаюсь сделать, любая подсказка, чего мне здесь не хватает. Поддерживает ли powershell аутентификацию на основе токенов или существует другой способ установки токена в веб-запросе?

Любая помощь очень ценится.

try {
    $json=ConvertTo-Json (@{"username"="*****";"password"="******";})
    $token = (Invoke-WebRequest -Uri "https://www.ansiblet.com/api/v1/authtoken/"  -Body $json -ContentType "application/json" -Method POST).content | ConvertFrom-Json

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

$result = (Invoke-WebRequest -Uri "https://www.ansiblet.com/api/v1/job_templates/{templateId}" -Header $headers -Method GET -ContentType "application/json").content | ConvertFrom-Json

Write-Host $result
}
catch{
    echo $site = $_.Exception.response
}

This web request isn't working,

$result = (Invoke-WebRequest -Uri "https://www.ansiblet.com/api/v1/job_templates/{templateId}" -Header $headers -Method GET -ContentType "application/json").content | ConvertFrom-Json

Ответ

Name                           Value                                                                                                       
----                           -----                                                                                                       
Token                          @{token=fcadd3e0326727e14f50401d4b8aaf91dc44ae47; expires=2018-09-14T12:30:11.546Z}                         
Authorization                  Bearer                                                                                                      
=

IsMutuallyAuthenticated : False
Cookies                 : {}
Headers                 : {Transfer-Encoding, Connection, X-API-Time, Allow...}
SupportsHeaders         : True
ContentLength           : -1
ContentEncoding         : 
ContentType             : application/json
CharacterSet            : 
Server                  : nginx/1.10.2
LastModified            : 9/14/2018 5:30:16 PM
StatusCode              : Unauthorized
StatusDescription       : UNAUTHORIZED
ProtocolVersion         : 1.1
ResponseUri             : https://www.ansiblet.com/api/v1/job_templates/1328/
Method                  : GET
IsFromCache             : False

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

попробуйте это: измените строку

 $token = (Invoke-WebRequest -Uri "https://stage-ansible-tower.hc.cloud.uk.hsbc/api/v1/authtoken/"  -Body $json -ContentType "application/json" -Method POST).content | ConvertFrom-Json

на

 $token = ((Invoke-WebRequest -Uri "https://stage-ansible-tower.hc.cloud.uk.hsbc/api/v1/authtoken/"  -Body $json -ContentType "application/json" -Method POST).content | ConvertFrom-Json).token
0 голосов
/ 17 сентября 2018

Наконец, Invoke-RestMethod помог мне.

Invoke-RestMethod $ url -Headers @ {Authorization = "Token $ token"}

Я все еще ищу решение с использованием Invoke-WebRequest, так как другие мои вызовы используют его,Не уверен, что не получается, я пробовал несколько решений, но не работал.

e.g

$headers = @{Authorization="Token $token"}
$headers = @{Authorization="Bearer $token"}
$headers = @{Authorization="Basic $token"}
0 голосов
/ 14 сентября 2018

$ token переменная содержит 2 поля - token и expires. Может быть, это должно быть только одно содержимое поля токена (fcadd3e0326727e14f50401d4b8aaf91dc44ae47)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...