Нужна помощь по вопросам аутентификации в 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 об этом? Я искал, не смог найти подходящий ресурс. Заранее спасибо!