如何获取和使用Rundeck JSESSIONID

时间:2017-09-04 11:38:42

标签: rundeck

我正在尝试获取有效的会话ID,但到目前为止还没有成功。

我正在尝试使用运行验证API,password authentication

  

要提交身份验证,请向网址提交POST请求:   $ RUNDECK_SERVER_URL / j_security_check

     

使用以下参数:   j_username:rundeck用户名j_password:密码

就像文档建议的那样,我正在运行:

>>> import request
>>> jsessionid = requests.post("http://localhost:4440/j_security_check", data=
{"j_username": "admin", "j_password": "admin" }, 
allow_redirects=False).cookies['JSESSIONID']

产生日志:

09/04/2017 03:22:59 PM - DEBUG - Starting new HTTP connection (1): 
10.200.101.21
09/04/2017 03:22:59 PM - DEBUG - http://localhost:4440 "POST 
/j_security_check?j_username=admin&j_password=admin HTTP/1.1" 302 0

但是jsessionid永远不会对下一次api调用有效,例如:

>>> response = requests.post("http://localhost:4440/api/14/project/my_project/hi
story" , headers={ "Content-Type": 'application/xml', 'X-Rundeck-
Auth-Token': jsessionid })
>>> response.content
"<result error='true' apiversion='20'><error code='unauthorized'>
<message>(Token:lhefo****) is not authorized for: /api/14/project/weekly_builds/history</message></error></result>"

但是,如果对于jsessionid我使用的是我在Rundeck用户界面中可以看到的令牌(在http://localhost:4440/user/profile中),那么API调用效果很好,而且我得到了历史记录。

我做错了什么想法?或者我错过了什么?

感谢。

1 个答案:

答案 0 :(得分:1)

不要担心JSESSIONID。您应该使用requests.Seesion()

import requests
s = requests.Session()
r = s.post("URL:PORT/j_security_check", data={"j_username": "user", "j_password": "pass"})
r.status_code # this should be 200
r.url # this should be rundeck home

r = s.get("URL:PORT/api/11/projects",headers = {'Accept': 'application/json'})
r.json() # you should see all your project