Аутентификация
Большинство запросов к REST API системы SmartDCIM требуют аутентификации. SmartDCIM поддерживает три способа аутентификации.
Аутентификация сессии
Чтобы воспользоваться этим способом аутентификации, нужно создать сессию с помощью логина и пароля. При создании сессии, сервер вернёт ID сессии. Этот ID можно передавать в заголовке Cookie последующих запросов для аутентификации. При каждом запросе сервер проверяет корректность переданного ID сессии и если он действителен, то успешно аутентифицирует пользователя.
Чтобы создать новую сессию, используйте запрос Создать ID сессии. Если сессия больше не нужна, то её можно удалить запросом Удалить ID сессии.
Пример
Создайте новую сессию запросом Создать ID сессии:
- Bash
- JavaScript
- NodeJS
- Python
bash
login=<...>
password=<...>
saymon_hostname=<...>
url=https://$saymon_hostname/node/api/users/session
curl -X POST $url \
-H "Content-Type: application/json" \
-d @- <<EOF
{
"login": "$login",
"password": "$password"
}
EOFjavascript
let login = <...>
let password = <...>
let saymonHostname = <...>
let path = "/node/api/users/session";
let headers = new Headers();
headers.append("Content-Type", "application/json");
let data = JSON.stringify({
"login": login,
"password": password
});
let requestOptions = {
method: "POST",
headers: headers,
body: data
};
fetch(saymonHostname + path, requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log("error", error));javascript
const http = require("http");
let login = <...>
let password = <...>
let saymonHostname = <...>
let path = "/node/api/users/session";
let options = {
"method": "POST",
"hostname": saymonHostname,
"headers": {
"Content-Type": "application/json"
},
"path": path
};
let req = http.request(options, function (res) {
let chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function (chunk) {
let body = Buffer.concat(chunks);
console.log(body.toString());
});
res.on("error", function (error) {
console.error(error);
});
});
let data = JSON.stringify({
login: login,
password: password
});
req.write(data);
req.end();python
import requests
login = <...>
password = <...>
saymon_hostname = <...>
url = "https://" + saymon_hostname + "/node/api/users/session"
body = {"login": login, "password": password}
response = requests.request("POST", url, json=body)
session_id = response.text
print(session_id)Затем, передайте ID сессии в куки:
- Bash
- JavaScript
- NodeJS
- Python
ID сессии хранится в файле cookies.txt.
bash
saymon_hostname=<...>
url=https://$saymon_hostname/node/api/users/current
curl -X GET $url -u $login:$password
curl -v --cookie cookies.txt \
-H "Content-Type: application/json" \
-X GET $urljavascript
let sessionId = <...>
let saymonHostname = <...>
let path = "/node/api/users/current";
let headers = new Headers();
headers.append("Cookie", "sid=" + sessionId);
let requestOptions = {
method: "GET",
headers: headers
};
fetch(saymonHostname + path, requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log("error", error));javascript
const http = require("http");
let sessionId = <...>
let saymonHostname = <...>
let path = "/node/api/users/current";
let options = {
"method": "GET",
"hostname": saymonHostname,
"headers": {
"Cookie": "sid=" + sessionId
},
"path": path
};
let req = http.request(options, function (res) {
let chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function (chunk) {
let body = Buffer.concat(chunks);
console.log(body.toString());
});
res.on("error", function (error) {
console.error(error);
});
});
req.end();python
import requests
session_id = <...>
saymon_hostname = <...>
url = "https://" + saymon_hostname + "/node/api/users/current"
headers={"Cookie": "sid=" + session_id}
response = requests.request("GET", url, headers=headers)
print(response.text)Базовая аутентификация
Базовая аутентификация (Basic Auth) использует логин и пароль от учётной записи пользователя, переданный в заголовке Authentication, для аутентификации запросов. Большинство примеров в этой документации используют этот способ аутентификации.
Пример
Примеры ниже показывают как применить этот способ аутентификации для запроса Получить текущего пользователя:
- Bash
- JavaScript
- NodeJS
- Python
bash
login=<...>
password=<...>
saymon_hostname=<...>
url=https://$saymon_hostname/node/api/users/current
curl -X GET $url -u $login:$passwordjavascript
let login = <...>
let password = <...>
let saymonHostname = <...>
let path = "/node/api/users/current";
let auth = "Basic " + btoa(login + ":" + password);
let headers = new Headers();
headers.append("Authorization", auth);
let requestOptions = {
method: "GET",
headers: headers
};
fetch(saymonHostname + path, requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log("error", error));javascript
const http = require("http");
let login = <...>
let password = <...>
let saymonHostname = <...>
let path = "/node/api/users/current";
let auth = "Basic " + Buffer.from(login + ":" + password).toString("base64");
let options = {
"method": "GET",
"hostname": saymonHostname,
"path": path,
"headers": {
"Authorization": auth
},
};
let req = http.request(options, function (res) {
let chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function (chunk) {
let body = Buffer.concat(chunks);
console.log(body.toString());
});
res.on("error", function (error) {
console.error(error);
});
});
req.end();python
import requests
login = <...>
password = <...>
saymon_hostname = <...>
url = "https://" + saymon_hostname + "/node/api/users/current"
response = requests.request("GET", url, auth=(login, password))
print(response.text)Ответ на успешный запрос выглядит следующим образом:
json
{
"id": "your_id",
"login": "your_login",
"authenticationToken": "your_auth_token",
...
}Аутентификация по токену
NOTE
Этот метод аутентификации может быть отключён с помощью параметра серверной конфигурации server.user.auth_token_enabled .
Чтобы воспользоваться этим способом аутентификации, нужно создать токен с помощью логина и пароля. После того как сервер создаст и вернёт токен его можно передавать в параметрах запроса для аутентификации. При каждом запросе сервер проверяет корректность переданного токена и если этот токен действителен, то успешно аутентифицирует пользователя.
Чтобы создать новый токен используйте запрос Создать токен аутентификации. Учтите, что при генерации нового токена существующий токен для этого пользователя становится недействительным. Если токен больше не нужен, то его можно удалить запросом Удалить токен аутентификации.
NOTE
Аутентификация по токену может быть использована для предоставления сторонним пользователям доступ к REST API системы SmartDCIM.
Пример
Сначала, создайте токен запросом Получить токен аутентификации:
- Bash
- JavaScript
- NodeJS
- Python
bash
login=<...>
password=<...>
user_id=<...>
saymon_hostname=<...>
url=https://$saymon_hostname/node/api/users/$user_id/auth-token
curl -X POST $url -u $login:$passwordjavascript
let login = <...>
let password = <...>
let userId = <...>
let saymonHostname = <...>
let path = "/node/api/users/" + userId + "/auth-token";
let auth = "Basic " + btoa(login + ":" + password);
let headers = new Headers();
headers.append("Authorization", auth);
let requestOptions = {
method: "POST",
headers: headers
};
fetch(saymonHostname + path, requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log("error", error));javascript
const http = require("http");
let login = <...>
let password = <...>
let userId = <...>
let saymonHostname = <...>
let path = "/node/api/users/" + userId + "/auth-token";
let auth = "Basic " + Buffer.from(login + ":" + password).toString("base64");
let options = {
"method": "POST",
"hostname": saymonHostname,
"headers": {
Authorization: auth
},
"path": path
};
let req = http.request(options, function (res) {
let chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function (chunk) {
let body = Buffer.concat(chunks);
console.log(body.toString());
});
res.on("error", function (error) {
console.error(error);
});
});
req.end();python
import requests
login = <...>
password = <...>
user_id = <...>
saymon_hostname = <...>
url = "https://" + saymon_hostname + "/node/api/users/" + \
user_id + "/auth-token"
response = requests.request("POST", url, auth=(login, password))
print(response.text)Затем, передайте токен в параметре запроса:
- Bash
- JavaScript
- NodeJS
- Python
bash
saymon_hostname=<...>
api_token=<...>
url=https://$saymon_hostname/node/api/users/current
curl -X GET $url?api-token=$api_tokenjavascript
let authToken = <...>
let saymonHostname = <...>
let path = "/node/api/users/current?api-token=" + authToken;
let requestOptions = {
method: "GET"
};
fetch(saymonHostname + path, requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log("error", error));javascript
const http = require("http");
let authToken = <...>
let saymonHostname = <...>
let path = "/node/api/users/current?api-token=" + authToken;
let options = {
"method": "GET",
"hostname": saymonHostname,
"path": path
};
let req = http.request(options, function (res) {
let chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function (chunk) {
let body = Buffer.concat(chunks);
console.log(body.toString());
});
res.on("error", function (error) {
console.error(error);
});
});
req.end();python
import requests
api_token = <...>
saymon_hostname = <...>
url = "https://" + saymon_hostname + "/node/api/users/current"
params = {"api-token": api_token}
response = requests.request("GET", url, params=params)
print(response.text)