2012-05-18 7 views
2

Я не нашел примеров использования людьми Python для прохождения CAS. Здесь надеется, что Кеннет Рейц может показать мне, как «запросы» могут сделать это легким ...Запросы на Python и CAS

В принципе, я не могу пройти мимо входа в CAS ... никогда не аутентифицирует мою попытку Python. (обратите внимание, что я определил два URL-адреса .... url1 - главная веб-страница, url2 - ссылка перенаправления на сайт CAS ... Я уже знаю ссылку на перенаправление, поэтому это упрощает).

Мое понимание - все, что мне нужно сделать, это захватить JsessionId, который CAS отправляет мне как файл cookie, затем берет этот файл cookie и просто добавляет jsessionid обратно на URL-адрес и отправляет его обратно в CAS в качестве POST с мое имя пользователя/пароль). Однако этот скрипт терпит неудачу каждый раз.

Могут ли некоторые гуру CAS помочь мне? Я просто не могу понять, почему он не аутентифицирует меня.

import sys 
import requests 

my_config = {'verbose': sys.stderr } 

url1 = 'http://agnes:8080' 
url2 = 'https://agnes:8543/irisCAS/login?service=http%3A%2F%2Fagnes%3A8080%2FirisRootWeb%2Fj_spring_cas_security_check' 

response = requests.get(url1, headers=headers, verify=False) 
print response.cookies 

cookies = response.cookies 
response = requests.post(url2, headers=headers, verify=False, config=my_config, params=cookies, auth=('username', 'password')) 

print response.status_code 
print response.content 

OUTPUT .... Обратите внимание, как JSessionID добавляется к URL2, так что это хорошо ..... я думаю.

{'JSESSIONID': 'EEE38382A1D5AAACA58E12433BDA0BFF'} 

2012-05-18T15:04:17.668601 POST https://agnes:8543/irisCAS/login?service=http%3A%2F%2Fagnes%3A8080%2FirisRootWeb%2Fj_spring_cas_security_check&JSESSIONID=EEE38382A1D5AAACA58E12433BDA0BFF 

200 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> 
<head> 
... 
... 
     </script> 

     <form id="fm1" class="fm-v clearfix" action="/irisCAS/login;jsessionid=30ABCAC79FEA5B48399053939530A608?service=http%3A%2F%2Fagnes%3A8080%2FirisRootWeb%2Fj_spring_cas_security_check&amp;JSESSIONID=B6235434D64C5E2E6C063BA3E1C1AC43" method="post"> 

      <div class="box fl-panel" id="login"> 
      <!-- Congratulations on bringing CAS online! The default authentication handler authenticates where usernames equal passwords: go ahead, try it out. --> 
       <h2>Enter your UserId and Password</h2> 

(this is just the xml of the CAS login page that I can't get past) 

... 
... 

ответ

3

ОК, я понял это, поэтому я собираюсь ответить на это тем, кто может найти это позже. Проблема в том, что я не понял основную идею «данных формы». Другими словами, веб-странице необходимо было ввести имя пользователя и пароль в «форму», а виртуальную кнопку «отправить» нужно было щелкнуть через POST, потому что это «событие» (т.е. _eventId ниже). Поэтому мне пришлось использовать параметр «data» и построить все это как словарь. Это то, что я сделал:

payload = {'_eventId': 'submit', 'lt': 'e1s1', 'submit': 'LOGIN', 'username': 'admin', 'password': 'admin'} 
sessionResp = sessionReq.post(url2, data=payload, params=cookies, verify=False, config=my_config, headers=headers) 
+0

Для справки вы можете принять свой собственный ответ – TankorSmash

 Смежные вопросы

  • Нет связанных вопросов^_^