Чтобы пройти аутентификацию с помощью CA SSO, а затем подключиться к нужному URL-адресу, нам нужно получить доступ к защищенному ресурсу на веб-сервере, настроенном для использования аутентификации CA SSO:
- Запрашивает ресурс на сервере, используя HTTP-запрос.
- Запрос получен веб-сервером и перехвачен веб-агентом CA SSO.
- Веб-агент определяет, защищен ли ресурс, и если да, собирает учетные данные пользователя и передает их на сервер политик.
- Сервер политик аутентифицирует пользователя и проверяет, авторизован ли аутентифицированный пользователь для запрошенного ресурса, на основе правил и политик, содержащихся в хранилище политик.
- После аутентификации и авторизации пользователя сервер политик предоставляет доступ к защищенным ресурсам.
Это достигается с помощью следующих шагов:
Откройте соединение (в данном случае HTTP-запрос) к URI защищенного ресурса. Поскольку запрос еще не прошел проверку подлинности, агент CA SSO выполнит перенаправление на страницу входа. В коде AllowAutoRedirect
установлено значение false. Это важно, так как URL-адрес перенаправления потребуется для последующего POST данных для входа на шаге 3 ниже. Если AllowAutoRedirect
равно True, ответ не будет включать заголовок Location, а последующая POST будет отправлена на исходный URL-адрес, который затем снова перенаправит на страницу входа. Однако между клиентом и сервером происходит POST, любые данные POST, содержащиеся в полезной нагрузке запроса на шаге 3, будут потеряны во время перенаправления.
Dim request As HttpWebRequest
Dim response As HttpWebResponse
Dim url As String = PROTECTED_URL
request = WebRequest.Create(url)
request.AllowAutoRedirect = False
response = request.GetResponse
' make sure we have a valid response
If response.StatusCode <> HttpStatusCode.Found Then
Throw New InvalidProgramException
End If
' get the login page
url = response.Headers("Location")
request = WebRequest.Create(url)
request.AllowAutoRedirect = False
response = request.GetResponse
Следующий шаг включает в себя создание HTTPS-запроса, который отправляет все данные формы, включая идентификатор пользователя и пароль, обратно на сервер. Цель агента аутентификации — проверить личность пользователя, проверив его идентификатор пользователя и пароль. Таким образом, их URL-адреса, естественно, используют SSL (уровень защищенных сокетов) и зашифрованы для нас, поэтому нам не требуется дальнейшее шифрование в нашей программе. Однако форматирование данных POST интересно тем, что есть два варианта. В примере программы используется более простой подход: для типа содержимого устанавливается значение application/x-www-form-urlencoded. Здесь данные POST форматируются аналогично строке запроса и отправляются как часть следующего запроса.
Dim postData As String
postData = ""
For Each inputName As String In tags.Keys
If inputName.Substring(0, 2).ToLower = "sm" Then
postData &= inputName & "=" & _
HttpUtility.UrlEncode(tags(inputName)) & "&"
End If
Next
postData += "postpreservationdata=&"
postData += "USER=" + HttpUtility.UrlEncode(USERNAME) & "&"
postData += "PASSWORD=" + HttpUtility.UrlEncode(PASSWORD)
request = WebRequest.Create(url)
cookies = New CookieContainer
request.CookieContainer = cookies
request.ContentType = FORM_CONTENT_TYPE
request.ContentLength = postData.Length
request.Method = POST_METHOD
request.AllowAutoRedirect = False ' Important
Dim sw As StreamWriter = New StreamWriter(request.GetRequestStream())
sw.Write(postData)
sw.Flush()
sw.Close()
response = request.GetResponse
person
Mohit Shrivastava
schedule
26.08.2015