diff --git a/pages/python_access.md b/pages/python_access.md new file mode 100644 index 0000000..76f5cff --- /dev/null +++ b/pages/python_access.md @@ -0,0 +1,93 @@ +# Доступ к API через запросы на Python + +## Использование OIDC аутентификации + +Чтобы воспользоваться этим видом аутентификации, сначала необходимо получить `токен` KeyCloak. Затем полученный токен можно использовать в запросах. + +``` +from requests import post + +with open('input.json') as f: + data = json.load(f) + +res = post(self.test_url, headers={"Authorization": f"Bearer {TOKEN}"}, json=data, allow_redirects=False) +``` +**Замечание**. Если не использовать флаг `allow_redirects=False`, при ошибке аутентификации будет возвращаться код 200 и страница авторизации KeyCloak. + +### Получение токена + +Для этого можно воспользоваться следующим кодом. Подставьте свои логин `USER` и пароль `PASSWORD`. Помимо токена, сохраните токен для обновления (`refrsh_token`). + +```python + +import subprocess + +res = subprocess.run(["curl", "-X", "POST", + "https://platform-sso.stratpro.hse.ru/realms/platform.stratpro.hse.ru/protocol/openid-connect/token", + "--data-urlencode", f'client_id=end-users', + "--data-urlencode", 'grant_type=password', + "--data-urlencode", f'username={USER}', + "--data-urlencode", f'password={PASSWORD}'], capture_output=True) +token = json.loads(res.stdout)['access_token'] +refresh_token = json.loads(res.stdout)['refresh_token'] +``` + +Можно использовать равноценную bash-команду. + +```bash + +curl -X POST https://platform-sso.stratpro.hse.ru/realms/platform.stratpro.hse.ru/protocol/openid-connect/token --data-urlencode client_id=end-users --data-urlencode grant_type=password --data-urlencode username=USER --data-urlencode password=PASSWORD + +``` + +### Обновление токена + +Если срок действия токена истёк, его можно обновить, используя полученный ранее `refresh_token`. + +```python + +import subprocess + +res = subprocess.run(["curl", "-X", "POST", + "https://platform-sso.stratpro.hse.ru/realms/platform.stratpro.hse.ru/protocol/openid-connect/token", + "--data-urlencode", f'client_id=end-users', + "--data-urlencode", 'grant_type=refresh_token', + "--data-urlencode", f'refresh_token={refresh_token}'], + capture_output=True) +token = json.loads(res.stdout)['access_token'] +``` +Можно использовать равноценную bash-команду. + +```bash + +curl -X POST https://platform-sso.stratpro.hse.ru/realms/platform.stratpro.hse.ru/protocol/openid-connect/token --data-urlencode client_id=end-users --data-urlencode grant_type=refresh_token --data-urlencode refresh_token=REFRESH_TOKEN + +``` + +## Использование basic аутентификации + +**Замечание**. Сервис, к которому обращаются, должен позволять использование basic-аутентификации. В противном случае используйте OIDC. + +Для запроса достаточно передать логин `USER` и пароль `PASSWORD` в параметры запроса. + +```python + +from requests import post + +with open('input.json') as f: + data = json.load(f) + +res = post(f'{test_url}/{app_name}/pipelines/{pipeline_name}/trials', + auth=HTTPBasicAuth(USER, PASSWORD), json=data) + +``` + +Также возможна авторизация с использованием токена базовой авторизации. Это строка в кодировке base64, содержащая имя пользователя и пароль. + +```python +from requests import request +# ещё один метод для отправки запросов + +res = request("POST", f"{test_url}/{app}/files/{box}/{filename}", + data="", headers={"Authorization": f"Basic {BASIC_TOKEN}"}) +```