一旦我获得了授予票证,我将无法使用它来访问受保护的资源:
此顺序之后越来越少了
其他我无济于事的事情:让SoapUI跟踪会话,或者使用'service'参数访问登录页面,以便重定向到资源
CAS和服务位于同一子域中,并且都使用安全传输
答案 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}