Для аутентификации с ЦС ССО, а затем подключить к нужному URL, мы должны получить доступ к защищенным ресурсам на веб-сервере настроен на использование CA SSO аутентификации:
- запрашивает ресурс на сервере, используя HTTP-запрос.
- Запрос получен веб-сервером и перехвачен веб-агентом CA SSO.
- Веб-агент определяет, защищен ли ресурс, и если да, он собирает учетные данные пользователя и передает их на сервер политики.
- Политический сервер аутентифицирует пользователя и проверяет, разрешен ли аутентифицированный пользователь для запрашиваемого ресурса на основе правил и политик, содержащихся в хранилище политик.
- После авторизации и авторизации пользователя сервер политики предоставляет доступ к защищенным ресурсам.
Это достигается с помощью следующих шагов:
Открыть соединение (запрос HTTP в данном случае) к URI защищенного ресурса. Поскольку запрос еще не прошел проверку подлинности, агент SSO CA выдает перенаправление на страницу входа в систему. В коде AllowAutoRedirect
установлено значение false. Это важно, поскольку URL-адрес перенаправления потребуется для последующего POST данных входа в систему на шаге 3 ниже. Если AllowAutoRedirect
были True, ответ не включал бы заголовок местоположения, а последующий 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 интересно, так как существует две альтернативы.В образце программы используется более простой подход к настройке типа контента для приложения/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
Выглядит отлично! У вас будет такой же код на C#? После того, как POST пользователя/пароль будет выполнен, можно ли отправлять запросы, как если бы Siteminder не присутствовал, или мне нужно добавить какой-то заголовок или что-то еще? –
Если я правильно понял, первый запрос ДОЛЖЕН быть HTTP, а второй запрос ДОЛЖЕН быть HTTPS? Если да, не могли бы вы исправить свое предложение ». Следующий шаг включает в себя создание HTTP-запроса, который POSTs все данные формы *« это должен быть HTTPS правильно? Спасибо :-) –