API 文档

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

    资产详情

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

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

    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. 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. return json.loads(response.text)['token']
    10. def get_user_info():
    11. url = 'https://demo.jumpserver.org/api/v1/users/users/'
    12. token = get_token()
    13. header_info = { "Authorization": 'Bearer ' + token }
    14. response = requests.get(url, headers=header_info)
    15. print(json.loads(response.text))
    16. get_user_info()
    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, 可以直接获取即可

    以 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. signature="jKyvPcxB4JbmYY4mByyBY7cZfNl4OW9HpFQlG7N4YcJPteKTu4MW
    4. CLyk+gIr0wDgqtLWf9NLpMAMimdfsH7FSWGfbMFSrsVTHNTk0rK3usrfFnti1dx
    5. sM4jl0kYJCKTGI/UWkqiaxwNiKqGcdlEDrTcUhhsFsOIo8VhddmZTZ8w="
    6. 服务器收到请求后,根据 keyId从数据库中取到keySecret, 解密签名,比对 签名内容和请求的字段是否一致,如果一致,认证成功,否则失败

    python 使用 requests 请求示例

    代码

    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. print(req.content)