Проблемы при попытке воспроизвести через VBA WinHttpReq вход в систему через стандартный веб-браузер - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь автоматизировать загрузку файлов через Excel в интрасети моей компании. Для этого мне сначала нужно пройти аутентификацию, и тут я застрял.

Я "перехватил" заголовки http, которые ходят туда-сюда через обычный веб-браузер. Когда я пытаюсь имитировать их через скрипт VBA, перенаправление на скрипт входа в систему не работает. Это код, который я написал:

Sub main()

Dim WinHttpReq As Object
Dim url1, url2, Server_Cookie As String

Set WinHttpReq = CreateObject("MSXML2.ServerXMLHTTP")

url1 = "https://www.e-access.pepe.com/empsvcs/hrpinmgt/pagLogin/?sysName=MgmtSysCtr&retURL=http://greenday.homer.pepe.com:80/gbsoms/process_csp.htm"

WinHttpReq.Open "GET", url1, False
WinHttpReq.SetRequestHeader "Referer", "http://greenday.homer.pepe.com/gbsoms/login.htm"
WinHttpReq.Send

headers = WinHttpReq.GetAllResponseHeaders
Debug.Print headers

Server_Cookie = Split(WinHttpReq.GetResponseHeader("Set-Cookie"), ";")(0)

url2 = "https://www.e-access.pepe.com/isam/sps/oidc/rp/pepe-RP/kickoff/pepe-Password?Target=https%3A%2F%2Fwww.e-access.pepe.com%2Fempsvcs%2Fhrpinmgt%2FpagLogin%2F%3FsysName%3DMgmtSysCtr%26retURL%3Dhttp%3A%2F%2Fgreenday.homer.pepe.com%3A80%2Fgbsoms%2Fprocess_csp.htm"

WinHttpReq.Open "GET", url2, False
WinHttpReq.SetRequestHeader "Referer", "https://www.e-access.pepe.com/empsvcs/hrpinmgt/pagLogin/?sysName=MgmtSysCtr&retURL=http://greenday.homer.pepe.com:80/gbsoms/process_csp.htm"
WinHttpReq.SetRequestHeader "Cookie", Server_Cookie
WinHttpReq.Send

headers = WinHttpReq.GetAllResponseHeaders

Debug.Print headers

End Sub

Вот трафик httpheader, отправленный веб-сервером после запуска моего скрипта:

Cache-Control: no-store
Date: Wed, 16 Jan 2019 03:19:07 GMT
Pragma: no-cache
Content-Length: 1184
Content-Type: text/html
P3P: CP="NON CUR OTPi OUR NOR UNI"
Set-Cookie: PD-S-SESSION-     ID=1_2_0_Ftf7yAF0HjLCwkfUdY1ZeTuSylBmpcg84UxEblnciDGjrMou; Path=/; Secure; HttpOnly
x-frame-options: DENY
x-content-type-options: nosniff
x-xss-protection: 1
content-security-policy: frame-ancestors 'none'
strict-transport-security: 
-------------------------------
Cache-Control: no-store
Date: Wed, 16 Jan 2019 03:17:57 GMT
Pragma: no-cache
Content-Length: 1184
Cache-Control: no-store
Date: Wed, 16 Jan 2019 03:18:14 GMT
Pragma: no-cache
Content-Length: 1184
Content-Type: text/html
P3P: CP="NON CUR OTPi OUR NOR UNI"
Set-Cookie: PD-S-SESSION-ID=1_2_0_H1MYEqDa94y- 5zBHcx1ci5KutKZDmimrpBLkNKHpmA558crE; Path=/; Secure; HttpOnly
x-frame-options: DENY
x-content-type-options: nosniff
x-xss-protection: 1
content-security-policy: frame-ancestors 'none'
strict-transport-security: 

"Поле местоположения не получено": (

Это httpheaders при использовании реального веб-браузера:

https://www.e-access.pepe.com/empsvcs/hrpinmgt/pagLogin /?sysName=MgmtSysCtr&retURL=http://greenday.homer.pepe.com:80/gbsoms/process_csp.htm
Host: www.e-access.pepe.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0)  Gecko/20100101 Firefox/56.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: http://greenday.homer.pepe.com/gbsoms/login.htm

### here comes a Javascript who redirect the web-browser
### and makes the next line appears a NS_BINDING_ABORTED

NS_BINDING_ABORTED
content-length: 1184
content-type: text/html
date: Tue, 15 Jan 2019 23:57:04 GMT
p3p: CP="NON CUR OTPi OUR NOR UNI"
x-content-type-options: nosniff
cache-control: no-store
x-xss-protection: 1
strict-transport-security: 
pragma: no-cache
Set-Cookie: PD-S-SESSION-   ID=1_2_0_ejSNPGTvnBqcABWph+jKXkP4q7qetjPCxApl9fYwO7zQ9RQg; Path=/; Secure; HttpOnly
-------------------
https://www.e-access.pepe.com/isam/sps/oidc/rp/PEPE-RP/kickoff/PEPE- Password?Target=https%3A%2F%2Fwww.e-access.pepe.com%2Fempsvcs%2Fhrpinmgt%2FpagLogin%2F%3FsysName%3DMgmtSysCtr%26retURL%3Dhttp%3A%2F%2Fgreenday.homer.pepe.com%3A80%2Fgbsoms%2Fprocess_csp.htm
Host: www.e-access.pepe.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0)  Gecko/20100101 Firefox/56.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://www.e-access.pepe.com/empsvcs/hrpinmgt/pagLogin/?sysName=MgmtSysCtr&retURL=http://greenday.homer.pepe.com:80/gbsoms/process_csp.htm
Cookie: PD-S-SESSION- ID=1_2_0_ejSNPGTvnBqcABWph+jKXkP4q7qetjPCxApl9fYwO7zQ9RQg

GET: HTTP/1.1 302 Found <<---- 302 is a the code after a redirect. I've never been able to reproduce this :(
content-language: en-US
date: Tue, 15 Jan 2019 23:57:05 GMT

location: https://oidc.idp.elogin.pepe.com/mga/sps/oauth/oauth20/authorize?nonce=POEPJ6247G&redirect_uri=https%3A%2F%2Fwww.e-access.pepe.com%2Fisam%2Fsps%2Foidc%2Frp%2FPEPE-RP%2Fredirect%2FPEPE-Password&response_mode=form_post&scope=openid&Target=https%3A%2F%2Fwww.e-access.pepe.com%2Fempsvcs%2Fhrpinmgt%2FpagLogin%2F%3FsysName%3DMgmtSysCtr%26retURL%3Dhttp%3A%2F%2Fgreenday.homer.pepe.com%3A80%2Fgbsoms%2Fprocess_csp.htm&response_type=id_token&state=HbmqyJZroF&client_id=Password-PEPE

p3p: CP="NON CUR OTPi OUR NOR UNI"
transfer-encoding: chunked
cache-control: no-cache="set-cookie, set-cookie2"
expires: Thu, 01 Dec 1994 16:00:00 GMT
strict-transport-security: 
Set-Cookie: AMWEBJCT!%2Fisam!JSESSIONID=0000t_S44DVXblXH_8CLCTr3Rzf:e8d2a634-c9e1-4349-a13d-11494e6a414c; Path=/; HttpOnly
PD_STATEFUL_97209400-5e43-11e8-bd34-00505699647e=%2Fisam; Path=/
PD-S-SESSION-ID=1_2_0_ejSNPGTvnBqcABWph+jKXkP4q7qetjPCxApl9fYwO7zQ9RQg; Path=/; Secure; HttpOnly

Над ним видно поле "location", отправляемое, когда реальный веб-браузер отправляет запрос ...: (

Получен JavaSript, который перенаправляет на другой аутентификационный сайт:

<html>
  <head>
    <title>PEPE Login Redirect</title>
    <script type="text/javascript">
    // Check to see what hostname is used to login to appliance - use the right config based on it
    var hname = window.location.hostname.toLowerCase();
    var dcsuffix = '';
    if (hname.indexOf("aldc") == 0 || hname.indexOf("ffdc") == 0)
    {
        dcsuffix = "DC";
    }
    else if (hname.indexOf("wwwagt") == 0 || hname.indexOf("wwwfft") == 0)
    {
        dcsuffix = "TMP";
    }
    var purl = window.location.href;
    var turl = encodeURIComponent(purl);
    if ("" == "2")
    {
        window.location = "/isam/sps/oidc/rp/PEPE-RP"+dcsuffix+"/kickoff/PEPE-PwdPlus"+dcsuffix+"?Target="+turl;
    }
    else if ("" == "3")
    {
        window.location = "/isam/sps/oidc/rp/PEPE-RP"+dcsuffix+"/kickoff /PEPE-Token"+dcsuffix+"?Target="+turl;
    }
    else if ("" == "4")
    {
        window.location = "/isam/sps/oidc/rp/PEPE-RP"+dcsuffix+"/kickoff/PEPE-Opus"+dcsuffix+"?Target="+turl;
    }
    else
    {
        window.location = "/isam/sps/oidc/rp/PEPE-RP"+dcsuffix+"/kickoff/PEPE-Password"+dcsuffix+"?Target="+turl;
     }
    </script>
  </head>
  <body>
    <form></form>
  </body>
</html>

Как показано выше в заголовках http, заголовок кода завершается последним параметром «else» со всеми переменными в пустых значениях, кроме «turl» (в кодировке URI):

/ иш / СФС / РСИН / об / ПЕПЕ-RP / стартовые / ПЕП-пароль "? Целевые = HTTPS% 3A% 2F% 2Fwww.e-access.pepe.com% 2Fempsvcs% 2Fhrpinmgt% 2FpagLogin% 2F% 3FsysName % 3DMgmtSysCtr% 26retURL% 3Dhttp% 3A% 2F% 2Fgreenday.homer.pepe.com% 3A80% 2Fgbsoms% 2Fprocess_csp.htm Хост: www.e-access.pepe.com

Суть в том, что я не могу получить поле "location" с веб-сервера, которое перенаправляет меня на следующий URL. Очевидно, что у этого местоположения есть ключ, который меняется каждый раз, и поэтому его нужно захватить ...

Извините за длинную историю, но я старался быть максимально ясным. Любой гуру, который может пролить свет, будет высоко оценен :) Спасибо.

...