войти с помощью SoapUI на сервер Jasig CAS - PullRequest
2 голосов
/ 14 июня 2019

После того, как я получил билет, я не могу использовать его для доступа к защищенным ресурсам:

  1. Я могу получить доступ к странице входа в систему и получить параметр lt билета входа и файл cookie JSessionId
  2. Повторить попытку входа с параметрами 'lt', Cookies, именем пользователя, паролем, отправить и т. Д.
  3. Я получаю файл cookie CASTGC и использую его для доступа к / serviceValidate? Service = protectedResource точно так же, как и в веб-обозревателе, я проверил все файлы cookie и параметры, но в веб-обозревателе я получил перенаправлен на сервис и в SoapUI я получаю страницу входа в 200. Я никогда не получаю сервисный билет 'ST'

Это больше и меньше после этой последовательности:

enter image description here

Другие вещи, которые я пытался безрезультатно: позволить SoapUI отслеживать сеанс или получить доступ к странице входа с параметром 'service', чтобы перенаправить на ресурс

CAS и служба находятся в одном и том же поддомене, и оба используют безопасный транспорт

1 Ответ

2 голосов
/ 14 июня 2019

У меня получилось, извините, если кто-то тоже пишет ответ.Когда у меня есть CASTGC и JSessionId, я создаю новый запрос GET с:

URL: https://cas.server.a/cas/login?service=https://service.a/resource
Cookie: JSESSIONID=A89...;CASTGC=TGT-27681...-cas;

Я не знаю, почему он не работает при первом входе в систему, чтобы получить CASTGC Cookie, чтобыПодводя итог, можно выделить три запроса: первый для получения lt, второй для получения CASTGC Cookie и последний для получения услуги.

- Спасибо за ответ, чтобы сэкономить время для других, этошаги, которые я сделал для Jasig CAS:

шаг 1, HTTP POST, чтобы получить lt

URL: https://cas.server.a/cas/login

шаг 2, передача свойства, чтобы получить lt и поместить его в свойство lt:

source //input[@name="lt"]/@value, from XML formatted response
destination: project property lt

шаг 3, Groovy Script для получения файла cookie JSessionId и помещения его в свойство Cookie1:

def headerValue = testRunner.testCase.getTestStepByName("step-1").httpRequest.response.responseHeaders["Set-Cookie"]
context.testCase.setPropertyValue('Cookie1', headerValue[0]);

шаг 4, HTTP POST для получения CGT

URL: https://cas.server.a/cas/login
username: redacted
password: redacted
lt: ${#TestCase#lt}
_eventId: submit

шаг 5,Groovy-скрипт для получения CGT-cookie

def headerValue = testRunner.testCase.getTestStepByName("step-4").httpRequest.response.responseHeaders["Set-Cookie"]
context.testCase.setPropertyValue('Cookie2', headerValue[1]);

шаг 6, HTTP POST для получения билета на сервис

URL: https://cas.server.a/cas/login?service=https://service.a/resource
cookie:${#TestCase#Cookie1};${#TestCase#Cookie2}
not allowed redirects

step7, Groovy-скрипт для получения сервисного билета и помещения его в свойство тестового набора 'ST'

def headerValue = testRunner.testCase.getTestStepByName("step-6").httpRequest.response.responseHeaders["Location"]
def ticket=headerValue[0];
context.testCase.setPropertyValue('ST',ticket.substring(ticket.indexOf("ticket")));

шаг 8, используйте ST, в моем случае это был вызов testLinkAPI

def ST=context.testCase.getPropertyValue('ST');
def URL="https://service.a/testlink/lib/api/xmlrpc/v1/xmlrpc.php?"  + ST;
cookie: ${#TestCase#Cookie1};${#TestCase#Cookie2}
...