API 文档

Api 列表

资产列表

http://192.168.244.144/api/v1/assets/assets/

资产详情

http://192.168.244.144/api/v1/assets/assets/2c56fd37-db65-40ed-b787-b65a98635f12/

Api 访问地址

VersionAccess methodexample
< 2.0.0http://<url>/docshttp://192.168.244.144/docs
>=2.0.0http://<url>/api/docs/http://192.168.244.144/api/docs/
>=2.6.0http://<url>/api/docs/http://192.168.244.144/api/docs/

版本小于 v2.6 需要打开 debug 模式

  1. vi config.yml
  1. ...
  2. # 如果版本更低的话,配置文件是 config.py
  3. # Debug = true
  4. DEBUG: true

api_swagger

API认证

JumpServer Api 支持的认证有以下几种方式

  1. Session 登录后可以直接使用 session_id 作为认证方式
  2. Token 获取一次性 Token,该 Token 有有效期, 过期作废
  3. Private Token 永久 Token
  4. Access Key Http Header 进行签名

Session

用户通过页面后登录,cookie 中会存在 sessionid, 请求时同样把 sessionid 放到 cookie 中

Token

使用账号密码调用 Api 获取 token,如果启用了 MFA,则需要两步验证

  1. curl -X POST http://localhost/api/v1/authentication/auth/ \
  2. -H 'Content-Type: application/json' \
  3. -d '{"username": "admin", "password": "admin"}'

代码:

  1. import requests
  2. import json
  3. def get_token():
  4. url = 'https://demo.jumpserver.org/api/v1/authentication/auth/'
  5. query_args = {
  6. "username": "admin",
  7. "password": "admin"
  8. }
  9. response = requests.post(url, data=query_args)
  10. return json.loads(response.text)['token']
  11. def get_user_info():
  12. url = 'https://demo.jumpserver.org/api/v1/users/users/'
  13. token = get_token()
  14. header_info = { "Authorization": 'Bearer ' + token }
  15. response = requests.get(url, headers=header_info)
  16. print(json.loads(response.text))
  17. get_user_info()

Private Token

  1. docker exec -it jms_core /bin/bash
  2. cd /opt/jumpserver/apps
  3. python manage.py shell
  4. from users.models import User
  5. u = User.objects.get(username='admin')
  6. u.create_private_token()

已经存在 private_token, 可以直接获取即可

  1. u.private_token

以 PrivateToken: 937b38011acf499eb474e2fecb424ab3 为例:

  1. curl -H 'Authorization: Token 937b38011acf499eb474e2fecb424ab3' \
  2. -H "Content-Type:application/json" http://demo.jumpserver.org/api/v1/users/users/

Access Key

Access key 签名机制是为了安全, IETF 发布的法案 详见此处 认证的原理是:

  1. 用户有一个 access key, keyID(keyId)和密钥(keySecret), 这个key是预生成的,请求者和服务器都知晓
  2. 用户请求时 将请求的 地址、请求方法、时间等使用 密钥(某种对称算法)进行加密,作为签名 连同 keyId 一同放到 header 中发给服务器
  3. Authorization: Signature keyId="Test",algorithm="rsa-sha256",
  4. signature="jKyvPcxB4JbmYY4mByyBY7cZfNl4OW9HpFQlG7N4YcJPteKTu4MW
  5. CLyk+gIr0wDgqtLWf9NLpMAMimdfsH7FSWGfbMFSrsVTHNTk0rK3usrfFnti1dx
  6. sM4jl0kYJCKTGI/UWkqiaxwNiKqGcdlEDrTcUhhsFsOIo8VhddmZTZ8w="
  7. 服务器收到请求后,根据 keyId从数据库中取到keySecret, 解密签名,比对 签名内容和请求的字段是否一致,如果一致,认证成功,否则失败

python 使用 requests 请求示例

安装依赖

  1. pip install requests drf-httpsig
  2. python

代码

  1. import requests
  2. from httpsig.requests_auth import HTTPSignatureAuth
  3. KEY_ID = 'su-key'
  4. SECRET = 'my secret string'
  5. signature_headers = ['(request-target)', 'accept', 'date']
  6. headers = {
  7. 'Accept': 'application/json',
  8. 'Date': "Mon, 17 Feb 2020 06:11:05 GMT"
  9. }
  10. auth = HTTPSignatureAuth(key_id=KEY_ID, secret=SECRET,
  11. algorithm='hmac-sha256',
  12. headers=signature_headers)
  13. req = requests.get('http://localhost/api/v1/users/users/',
  14. auth=auth, headers=headers)
  15. print(req.content)