Как получить пароль учетной записи по API?
JumpServer имеет полноценный API, описанный через Swagger, доступный по адресу https://IP/api/docs
Там все все возможные API запросы, но нет запроса на получение пароля от учетных записей
Чтобы иметь возможность получать текущие пароли по API, необходимо создать отдельный API ключ.
Перейдите в раздел PAM - INTEGRATION - Applications , нажмите на кнопку Create, укажите список УЗ, которые должны быть доступны через этот API ключ, после сохранения параметров вы увидите ваш API ключ(точнее пару ID и Secret)
На вкладке Call records вы увидите журнал запросов с указанием пароль какой УЗ был получен по этому запросу.
Пример скрипта для запроса пароля на Python:
import warnings
warnings.filterwarnings("ignore", message="pkg_resources is deprecated as an API")
import requests
import os
from datetime import datetime, timezone
from httpsig.requests_auth import HTTPSignatureAuth
warnings.filterwarnings("ignore", category=UserWarning, module="httpsig")
API_URL = os.getenv("API_URL", "https://js44.afi.local")
KEY_ID = os.getenv("API_KEY_ID", "89044e4b-352e-4a67.....")
KEY_SECRET = os.getenv("API_KEY_SECRET", "OXqDBf6wDnBGRm.....")
ORG_ID = os.getenv("ORG_ID", "00000000-0000-0000-0000-000000000002")
class APIClient:
def __init__(self):
self.session = requests.Session()
self.auth = HTTPSignatureAuth(
key_id=KEY_ID, secret=KEY_SECRET,
algorithm='hmac-sha256', headers=['(request-target)', 'accept', 'date', 'x-jms-org']
)
def get_account_secret(self, asset, account):
url = f"{API_URL}/api/v1/accounts/integration-applications/account-secret/"
headers = {
'Accept': 'application/json',
'X-JMS-ORG': ORG_ID,
'Date': datetime.now(timezone.utc).strftime('%a, %d %b %Y %H:%M:%S GMT'),
'X-Source': 'jms-pam'
}
params = {"asset": asset, "account": account}
try:
response = self.session.get(
url,
auth=self.auth,
headers=headers,
params=params,
timeout=10,
verify="afi-AFIDC-CA.crt"
)
response.raise_for_status()
return response.json()
except requests.RequestException as e:
print(f"API Ошибка запроса: {e}")
return None
if __name__ == "__main__":
client = APIClient()
result = client.get_account_secret(asset="Lab_Rabbit", account="serg")
print(result)