Задача

Во внешнем сервисе реализовать возможность доступа к программным интерфейсам приложения 1С

Сценарий

  1. Пользователь в личном кабинете внешнего сервиса вводит логин и пароль от учетной записи 1cFresh
  2. Внешний сервис под учетной записью пользователя создает служебного пользователя абонента для доступа к API приложения 
  3. Внешний сервис добавляет в приложение пользователя служебного пользователя для работы с API 
  4. Внешний сервис получает возможность использования приложения 1С через API

Пример для плагина REST Client на Visual Studio Code

### ПРИМЕР СОЗДАНИЯ ПОЛЬЗОВАТЕЛЯ ДЛЯ ДОСТУПА К API ПРИЛОЖЕНИЯ В СЕРВИСЕ 1CFRESH
# Включает операции:
#  1. Получение кода абонента
#  2. Создание нового пользователя абонента
#  3. Получение списка областей абонента
#  4. Добавление пользователя в конкретную область с доступом к API
#
# Используемые переменные:
#   server - адрес сервиса 1cFresh
#   url - адрес ExtAPI менеджера сервиса (a/adm/hs/ext_api/execute)
#   authorization - авторизация абонента
###
@server = https://1cfresh.com
@url = a/adm/hs/ext_api/execute
@authorization = Basic andreev.6@yopmail.com 123Qwer


###  1. Получение кода абонента.
##   Выполняется запрос к менеджеру сервиса и возвращается:
##     account[] - абоненты по текущему пользователю
##       name - наименование абонента
##       id - код абонента
##       role - роль текущего пользователя для абонента
##
##   ВАЖНО:
##   Дальнейшая работа доступна только для роли Owner

# @name accountInfo
POST {{server}}/{{url}}
Authorization: {{authorization}}

{  
   "general":{  
      "type":"ext",
      "method":"account/list"
   }
}


### 2. Создание нового пользователя абонента.
##  Для абонента создается новый пользователь, под которым 
##  будут осуществляться запросы к API
##
##  Важно!
##  На этом этапе следует придумать имя пользователя и пароль для учетной записи.
##
##  Используемые переменные:
##    account - код абонента (id из предыдущего этапа) = accountInfo.response.body.$.account[0].id
##    service_password - пароль для служебного пользователя
@service_password = 123Qwer

POST {{server}}/{{url}}
Authorization: {{authorization}}

{  
   "general":{  
      "type":"ext",
      "method":"account/users/create"
   },
   "auth": {
      "account":{{accountInfo.response.body.$.account[0].id}}
   },
   "id": {{accountInfo.response.body.$.account[0].id}},
   "login": "{{$timestamp}}",
   "name": "{{$timestamp}}",
   "password": "{{service_password}}",
   "email_required": false,
   "role": "user"
}


### 3. Получение списка областей абонента.
##  Определяем области, соответствующие абоненту.
##  Для авторизации используется логин и код абонента, полученные на предыдущем этапе.
##
##  Используемые переменные:
##    account - код абонента

# @name tenantInfo
POST {{server}}/{{url}}
Authorization: {{authorization}}

{  
   "general":{  
      "type":"ext",
      "method":"tenant/list"
   },
   "auth": {
     "account":{{accountInfo.response.body.$.account[0].id}}
   }
}
### 4. Добавление пользователя в конкретную область.
##  Созданного пользователя следует добавить в конкретную область, полученную на этапе 3.
##  Пользователь добавляется с ролью "Доступ к API"
##   
##  Используемые переменные:
##    tenant_role - Используемая роль (api, user, administrator)
##    tenant_id - номер области = tenantInfo.response.body.$.tenant[0].id 
##    service_login - логин служебного пользователя
@tenant_role = api

POST {{server}}/{{url}}
Authorization: {{authorization}}

{  
   "general":{  
      "type":"ext",
      "method":"tenant/users/add"
   },
   "auth": {
     "account":{{accountInfo.response.body.$.account[0].id}}
   },
   "id": {{tenantInfo.response.body.$.tenant[0].id}},
   "login":"{{service_login}}",
   "role": "{{tenant_role}}"
}