Выполнение вызова Flask Restful API с помощью invoke-restmethod и JWT auth - PullRequest
1 голос
/ 21 февраля 2020

У меня есть этот API, который я создал с Flask (Python), и я не могу получить powershell для успешного выполнения запроса API к нему. Проблема не в API, потому что я тестировал его с почтальоном, и все работает как надо. Точнее, когда я добавляю аутентификацию токена JWT, она не работает с powershell, в моем API функции Create, Update и delete защищены аутентификацией токена JWT, а функция basi c Read вообще не имеет аутентификации. Ниже приведен код PowerShell, который я использую:

Вот функция, которая генерирует мой токен (эта часть работает, обратите внимание, что я удалил имя пользователя и пароль из функции в целях безопасности):

function get-token {
param (
    [Parameter(Position=0, Mandatory=$false)]
    [string]$user,
    [Parameter(Position=1, Mandatory=$false)]
    [string]$password
)
$body = @{
    username="$user"
    password="$password"
}
$jsonbody = $body | ConvertTo-Json
$uri = "https://codegenius.live/api/auth"
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Accept","application/json")
$headers.Add("Content-Type","application/json")
$response = Invoke-RestMethod -Uri $uri -Method Post -Body $jsonbody -Headers $headers
$response.access_token
}

Эта функция сгенерирует токен следующим образом:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1ODIyMzA2OTUsImlhdCI6MTU4MjIzMDM5NSwibmJmIjoxNTgyMjMwMzk1LCJpZGVudGl0eSI6MX0.8wZZJEGxV7P4ZzN23eZ3d5-MGJ00N5zKHuCZXn9XRuw

Вот вызов, который я пытаюсь сделать, который не работает:

$body = @{
tpl_name="my template name"
tpl_subject="my template subject"
tpl_plaintext_content="bla bla bla"
tpl_html_content="bla bla bla"
} 

$authheader = "JWT " + (get-token)
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Accept","application/json")
$headers.Add("Content-Type","application/json")
$headers.Add("Authorization",$authheader)
$jsonbody = $body | ConvertTo-Json
$uri = "https://codegenius.live/api/add-email"
$response = Invoke-RestMethod -Uri $uri -Method Post -Body $jsonbody -Headers $headers

Сообщение ответа на запрос: вот этот:

Invoke-RestMethod :
500 Internal Server Error
Internal Server Error
The server encountered an internal error and was unable to complete your request. Either the server         
is overloaded or
there is an error in the application.
Au caractère Ligne:25 : 17
+ ... $response = Invoke-RestMethod -Uri $uri -Method Post -Body $jsonbody  ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation : (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-    
RestMethod], WebEx
ception
+ FullyQualifiedErrorId : 
WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

Это очень странно, потому что, как я сказал, он работает с Почтальоном (см. изображения ниже), я попытался найти проблему, но не нашел подсказки, как на самом деле решить эту проблему. РЕДАКТИРОВАТЬ: изображения показывают, что в почтальоне я использовал http вместо https, это не проблема. В PowerShell http или https ничего не работает!

enter image description here

enter image description here

enter image description here

1 Ответ

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

Измените свою строку на эту,

$authheader = "JWT $(get-token)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...