Я пытаюсь автоматизировать загрузку файлов через 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. Очевидно, что у этого местоположения есть ключ, который меняется каждый раз, и поэтому его нужно захватить ...
Извините за длинную историю, но я старался быть максимально ясным. Любой гуру, который может пролить свет, будет высоко оценен :)
Спасибо.