add python instruction
This commit is contained in:
parent
f804a09c9f
commit
fca22e54b5
1 changed files with 93 additions and 0 deletions
93
pages/python_access.md
Normal file
93
pages/python_access.md
Normal file
|
@ -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}"})
|
||||
```
|
Loading…
Reference in a new issue