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

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

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

Большинство запросов к 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"
}
EOF
javascript
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 $url
javascript
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:$password
javascript
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:$password
javascript
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_token
javascript
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)

Смотрите также ​