使用SoapUI登录到Jasig CAS服务器

时间:2019-06-14 07:09:29

标签: soapui cas

一旦我获得了授予票证,我将无法使用它来访问受保护的资源:

  1. 我可以访问登录页面并检索登录票证'lt'参数和JSessionId Cookie
  2. 使用“ lt”,Cookie,用户名,密码,提交等参数重试登录
  3. 我确实获得了CASTGC cookie,并以与使用Web Explorer完全相同的方式使用它来访问/ serviceValidate?service = protectedResource,我已经检查了所有cookie和参数,但是在Web资源管理器中却得到了重定向到服务,并在SoapUI中获得200登录页面。我从来没有得到服务票“ ST”

此顺序之后越来越少了

enter image description here

其他我无济于事的事情:让SoapUI跟踪会话,或者使用'service'参数访问登录页面,以便重定向到资源

CAS和服务位于同一子域中,并且都使用安全传输

1 个答案:

答案 0 :(得分:2)

我成功了,很抱歉,如果有人也在写回复。一旦有了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脚本获取JSessionId cookie并将其放在属性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}