documentation/pages/python_access.md

93 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Доступ к 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}"})
```