Авторизация при запросах к сервисам

Авторизация для доступа к сервисам может быть осуществлена следующими способами:

Сервисы без аутентификации

Для реализации работы сервиса без аутентификации, необходимо задать для него значение none в настройке authMode в deploy.json

{
  "modules": {
    "rest": {
      "globals": {
        "authMode": {
          "echo": "none"

Запрос к сервису не будет требовать аутентификации, пример запроса curl https://dnt.iondv.com/rest/echo

Пример запроса к сервису без аутентификации в dnt: test/modules/rest/echo.spec.js

/Checking echo-pwd service/# Requesting echo-pwd GET/check if the request can be made using the headers auth

Сервисы со стандартрным механизмом авторизации по учетной записи

Все сервисы по умолчанию используют стандартный механизм авторизации, подразумевающий передачу учетных данных в заголовке:

  • путем авторизации через Basic Auth, пример

    curl -u demo@local:ion-demo https://dnt.iondv.com/rest/simple
    

    пример запроса с авторизацией Basic Auth в develop-and-test (dnt): test/modules/rest/echopwd.spec.js

    /Checking echo-pwd service/# Requesting echo-pwd GET/check if the request can be made using the basicAuth
    
  • путем передачи учетных данных в заголовках запроса

    curl -H "auth-user: demo" -H "auth-pwd: ion-demo" -H "auth-user-type: local" https://dnt.iondv.com/rest/simple
    

    или

    curl -H "auth-user: demo@local" -H "auth-pwd: ion-demo" https://dnt.iondv.com/rest/simple
    

    пример запроса с авторизацией учетными данными в заголовке в dnt: test/modules/rest/echopwd.spec.js

    /Checking echo-pwd service/# Requesting echo-pwd GET/check if the request can be made using the headers auth
    

Сервисы с аутентификацией через токен

Аутентификация по токену используется для исключения постоянной передачи учетной записи в запросах. Токены ограничены по времени жизни.

Для реализации работы сервиса с аутентификацией через токен, необходимо задать для него значение token в настройке authMode в deploy.json

{
  "modules": {
    "rest": {
      "globals": {
        "authMode": {
          "echo-token": "token"

Аутентификация через токен осуществляется путем отправки значения токена в заголовке запроса auth-token

curl -H "auth-token: c369a361db9742e9a9ae8e9fe55950a571493812" http://dnt.iondv.com/rest/echo-token

пример запроса с авторизацией через токен в dnt: test/modules/rest/token.spec.js

/Checking token service/# basicAuth authorization with admin rights/# check if the generated token is valid (basicAuth) (using echo-token)

подробнее о получении токена: Получение токена

Прокси-клиент для доступа к функциям модуля без получения нового токена.

Сервисы с аутентификацией методом OAuth2

Для реализации работы сервиса с аутентификацией oauth2, необходимо предварительно подключить в deploy.json плагин вида

"oauth": {
        "module": "lib/oAuthAdapter",
        "options": {
          "auth": "ion://auth",
          "dataSource": "ion://Db"
        }
      }

затем можно задать для сервиса значение oauth в настройке auth_mode:

{
  "modules": {
    "rest": {
      "globals": {
        "authMode": {
          "echo-oauth": "oauth"

спецификация oauth2 доступна по ссылке: https://oauth2-server.readthedocs.io/en/latest/index.html

Этот тип авторизации используется для предоставления третьей стороне ограниченного доступа к ресурсам пользователя без необходимости предоставлять логин и пароль. Запросы для получения доступа производятся в следующем порядке:

  1. Со стороны пользователя получаем cookie с id сессии:

    curl -X POST --cookie-jar 1.txt -d username="demo@local" -d password="ion-demo" http://dnt.iondv.com/auth
    
  2. Используя авторизованную сессию разрешаем клиенту ext@system запросы от нашего имени:

    curl -X POST --cookie ./1.txt "http://dnt.iondv.com/oauth2/grant?client_id=ext@system&response_type=code&state=123"
    

    В ответе будет содержаться параметр code.

  3. Теперь используя code можно получить токен:

    curl -X POST -d grant_type="authorization_code" -d code="<code>" -H "Authorization:Basic ZXh0QHN5c3RlbTppb24tZGVtbw==" http://dnt.iondv.com/oauth2/token
    

    в заголовке Authorization нужно ввести Basic <client_secret> код клиента. В ответе будет получен access_token.

  4. Для запросов от лица пользователя в сервисах с авторизацией oauth2 теперь можно авторизоваться используя access_token:

    curl -X POST -H "Authorization:Bearer <access_token>" http://dnt.iondv.com/rest/echo-oauth
    

пример запроса к сервису с авторизацией oauth2 в dnt: test/modules/rest/echooauth.spec.js

/Checking echo-oauth service