Я включил аутентификацию на моем узле opscenter согласно этот . У меня есть скрипт Python, который периодически вызывает действия opscenter через API-интерфейсы Opscenter REST. Из документации REST API казалось, что все, что мне нужно было сделать, это вызвать эти методы с базовой HTTP-аутентификацией (см. этот). Но эти вызовы всегда заканчивались ошибкой «пользователь должен войти в систему».
Покопавшись в javascript, который запускается, когда я использую веб-интерфейс opscenter, я решил, что я должен действительно вызвать метод входа в систему для создания сеанса и использовать этот сеанс для вызова других методов, таких как:
session = requests.Session()
login_body = '{"username": "%s", "password": "%s"}' % (opsc_uname, opsc_pwd)
login_resp = session.post("http://{url}/login".format(url=opsc_url), data=login_body).json()
clusterconf = session.get("http://{url}/cluster-configs".format(url=opsc_url)).json()
Неправильна ли документация api (которая утверждает, что использует базовую HTTP-аутентификацию)? Или я что-то неправильно делаю? Я использую версию opscenter 5.1.1.
Вы правильно поняли, OpsCenter 5.1 использует сеансы вместо базовой аутентификации. Вы просматривали документацию 5.0, поэтому она не была задокументирована. Вот правильный ссылка на сайт.
В дополнение к ссылке на документацию, которую пользователь "arre" разместил выше, когда вы реализуете этот метод, убедитесь, что вы не включаете фигурные скобки {}, поэтому, например, используйте
curl -H 'opscenter-session: d6c5e198b9b5ffeab9fd8dea6fb012aa' http://127.0.0.1:8888/permissions/user
Вместо того
curl -H 'opscenter-session: {d6c5e198b9b5ffeab9fd8dea6fb012aa}' http://127.0.0.1:8888/permissions/user