Аутентификация

Большинство запросов к REST API системы Центральный Пульт требуют аутентификации. Центральный Пульт поддерживает три способа аутентификации.

Аутентификация сессии

Чтобы воспользоваться этим способом аутентификации, нужно создать сессию с помощью логина и пароля. При создании сессии, сервер вернёт ID сессии. Этот ID можно передавать в заголовке Cookie последующих запросов для аутентификации. При каждом запросе сервер проверяет корректность переданного ID сессии и если он действителен, то успешно аутентифицирует пользователя.

Чтобы создать новую сессию, используйте запрос Создать ID сессии. Если сессия больше не нужна, то её можно удалить запросом Удалить ID сессии.

Пример

Создайте новую сессию запросом Создать ID сессии:

  • Bash

  • JavaScript

  • NodeJS

  • Python

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"
}
EOF
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));
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();
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.

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 $url
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));
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();
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

login=<...>
password=<...>
saymon_hostname=<...>
url=https://$saymon_hostname/node/api/users/current

curl -X GET $url -u $login:$password
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));
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();
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)

Ответ на успешный запрос выглядит следующим образом:

{
    "id": "your_id",
    "login": "your_login",
    "authenticationToken": "your_auth_token",
    ...
}

Аутентификация по токену

Этот метод аутентификации может быть отключён с помощью параметра серверной конфигурации server.user.auth_token_enabled.

Чтобы воспользоваться этим способом аутентификации, нужно создать токен с помощью логина и пароля. После того как сервер создаст и вернёт токен его можно передавать в параметрах запроса для аутентификации. При каждом запросе сервер проверяет корректность переданного токена и если этот токен действителен, то успешно аутентифицирует пользователя.

Чтобы создать новый токен используйте запрос Создать токен аутентификации. Учтите, что при генерации нового токена существующий токен для этого пользователя становится недействительным. Если токен больше не нужен, то его можно удалить запросом Удалить токен аутентификации.

Аутентификация по токену может быть использована для предоставления сторонним пользователям доступ к REST API системы Центральный Пульт.

Пример

Сначала, создайте токен запросом Получить токен аутентификации:

  • Bash

  • JavaScript

  • NodeJS

  • Python

login=<...>
password=<...>
user_id=<...>
saymon_hostname=<...>
url=https://$saymon_hostname/node/api/users/$user_id/auth-token

curl -X POST $url -u $login:$password
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));
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();
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

saymon_hostname=<...>
api_token=<...>
url=https://$saymon_hostname/node/api/users/current

curl -X GET $url?api-token=$api_token
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));
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();
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)