Поиск файлов cookie аутентификации для входа в систему с помощью Powershell - PullRequest
0 голосов
/ 14 июля 2020

Нужна помощь по вопросам аутентификации в CRM при использовании команд PowerShell. Когда я использую следующие команды через PowerShell, я получаю 401 «Неавторизованный».

$CRMCredentials=get-credential (username="someuser";password="somepassword")
$systemid='GSC-160802-836043'
$APIURL="https://crm.family.com/family/api/data/v8.2/gen_systems?`$filter=gen_serialnumber eq '$systemid'"
$headers = @{ Accept = 'application/json'}
$a=Invoke-RestMethod -Method Get -Uri $APIURL -Credential $CRMCredentials -Headers $headers

Однако, если я копирую URL-адрес и вставляю его в браузере, я получаю приглашение для входа в систему, где я ввожу те же учетные данные, которые Я использую PowerShell. После этого я могу достичь конечной точки API "https://crm.family.com/family/api/data/v8.2/gen_systems?$filter=gen_serialnumber eq 'GSC-160802-836043'".

Используя инструменты разработчика chrome и проверяя HTTP-запрос, я заметил, что сгенерировано 4 файла cookie.

введите описание изображения здесь

Используя информацию о файлах cookie, я написал тестовый код и смог войти в систему.

    $CRMCredentials=get-credential (username="someuser";password="somepassword")
    $systemid='GSC-160802-836043'
    $APIURL="https://crm.family.com/family/api/data/v8.2/gen_systems?`$filter=gen_serialnumber eq '$systemid'"
    $headers = @{ Accept = 'application/json'}
    
    $expiryforfirstcookie='2070-07-13T17:32:26.556Z'    
    $finaltime=Get-Date -Date ([datetime]::Parse($expiryforfirstcookie)) -Format G
     
    $ContentType = "application/json; odata.metadata=minimal"
    $cookie=new-object system.net.cookie
    $cookie.name = "ReqClientId"
    $cookie.path = "/"
    $cookie.value = "9230....."
    $cookie.domain = "crm.family.com"
    $cookie.Secure="true"
    $cookie.expires = "$finaltime"
    $cookie.HttpOnly="true"
    $session = New-Object Microsoft.PowerShell.Commands.WebRequestSession
    $session.cookies.add($cookie)
    
    $cookie2=new-object system.net.cookie
    $cookie2.name = "NSC_wt_gvmmttm_dsn003_gf"
    $cookie2.path = "/"
    $cookie2.value = "ffffffff096c...."
    $cookie2.domain = "crm.family.com"
    $cookie2.Secure="true"
    #$cookie2.expires = "Session"
    $cookie2.HttpOnly="true"
    $session.cookies.add($cookie2)
    
    $cookie3=new-object system.net.cookie
    $cookie3.name = "MSISAuth"
    $cookie3.path = "/"
    $cookie3.value = "77u/PD94bW....."
    $cookie3.domain = "crm.family.com"
    $cookie3.Secure="true"
    #$cookie2.expires = "Session"
    $cookie3.HttpOnly="true"
    
    $session.cookies.add($cookie3)
    
    $cookie4=new-object system.net.cookie
    $cookie4.name = "MSISAuth1"
    $cookie4.path = "/"
    $cookie4.value = "UW9BREU0OHB4Y2c....."
    $cookie4.domain = "crm.family.com"
    $cookie4.Secure="true"
    #$cookie2.expires = "Session"
    $cookie4.HttpOnly="true"
    
    $session.cookies.add($cookie4)

$a=Invoke-RestMethod -Method Get -Uri $APIURL -Credential $CRMCredentials -WebSession $session -Headers $headers -ContentType $ContentType

Мой вопрос к вам, ребята, заключается в том, что я думаю, что информация о файлах cookie меняется поэтому было бы неплохо извлечь и включить в мою команду "Invoke-RestMethod". Как я go об этом? Я искал, не смог найти подходящий ресурс. Заранее спасибо!

...