Авторизация при интеграции по API: различия между версиями
Mediawiki (обсуждение | вклад)  | 
				Merkulov (обсуждение | вклад)   | 
				||
| (не показано 65 промежуточных версий 2 участников) | |||
| Строка 1: | Строка 1: | ||
== Общие сведения ==  | == Общие сведения ==  | ||
'''API''' (Application Programming Interface или интерфейс программирования приложений) —   | '''API''' (Application Programming Interface или интерфейс программирования приложений) — совокупность инструментов и функций в виде интерфейса для создания новых приложений и интеграции с ИС. Все запросы к сервису '''БИФИТ Бизнес''' осуществляются при помощи авторотационного токена - '''access_token'''. Для генерации токена, необходимо пройти процедуру авторизации OAuth2. Для этого необходимо использовать логин/пароль зарегистрированной учетной записи.    | ||
Информация получаемая по OAuth2:  | Информация получаемая по OAuth2:  | ||
'''access_token''' — авторотационный ключ (обычно просто набор символов), предъявление которого является пропуском к защищенным ресурсам. Обращение к ним в самом простом случае происходит по HTTPS. Используется при работе по API  | * '''access_token''' — авторотационный ключ (обычно просто набор символов), предъявление которого является пропуском к защищенным ресурсам. Обращение к ним в самом простом случае происходит по HTTPS. Используется при работе по API  | ||
* '''refresh_token''' — ключ, по которому можно получить access token с помощью HTTP-запроса, аналогично авторизации по логину и паролю  | |||
* '''expires_in''' - время работы (протухания) access_token в секундах. В сервисе БИФИТ Бизнес составляет 12 часов или 43 200 секунд - 1 секунда = 43 199 секунд.  | |||
{{Note|'''Внимание''' <br>  | |||
Учетная запись от имени которой будет происходить работа по API должна иметь максимальное кол-во прав, для создания, редактирования или удаления документов и справочников БИФИТ Касса|  | |||
{{Note|'''Внимание'''    | |||
Учетная запись от имени которой   | |||
700}}  | 700}}  | ||
== Авторизацию в OAuth2 по паролю ==  | == Авторизацию в OAuth2 по паролю ==  | ||
{{ProductTable-2  | |||
|title-left='''Запрос'''  | |||
|title-right='''POST'''  | |||
|content-left= URL: https://kassa.bifit.com/cashdesk-api/v1/oauth/token  | |||
|content-right=  | |||
<syntaxhighlight>  | |||
https://kassa.bifit.com/cashdesk-api/v1/oauth/token  | |||
</syntaxhighlight>  | |||
|}}<br>  | |||
{{ProductTable-2  | |||
   |title-left= Request HEADERS  | |||
   |title-right='''HEADERS'''  | |||
   |content-left= отключение компрессии  | |||
   |content-right=  | |||
<syntaxhighlight lang="JSON">  | |||
Accept-Encoding: "deflate"  | |||
</syntaxhighlight>  | |||
|}}<br>  | |||
{{ProductTable-2  | |||
|title-left= Request Body  | |||
|title-right= type: '''x-www-form-urlencoded'''  | |||
|content-left=   | |||
* '''username''': логин учетной записи, передается в формате '''7xxxxxxxxxx'''  | |||
* '''password''': пароль, передается в виде зашифрованного хэш -> '''SHA-256 -> base64 urlencoded'''  | |||
* '''client_id''': передать значение ''"cashdesk-rest-client"''  | |||
* '''client_secret''': передать значение ''"cashdesk-rest-client"''  | |||
* '''grant_type''': передать значение ''"password"''  | |||
|content-right=   | |||
<syntaxhighlight lang="JSON">  | |||
username: "7xxxxxxxxxx"  | |||
password: "asdaldfkhj34o.......kljslkfas"  | |||
client_id: "cashdesk-rest-client"  | |||
client_secret: "cashdesk-rest-client"  | |||
grant_type: "password"  | |||
</syntaxhighlight>  | |||
|}}<br>  | |||
{{Note|'''Обратите внимание'''  | |||
Пароль передается в виде хэш суммы. Необходимо зашифровать пароль при помощи алгоритма '''SHA256''' и затем закодировать полученные данные по стандарту '''Вase64 urlencoded'''.<br>  | |||
Для удобства можно использовать данный <b>[https://caligatio.github.io/jsSHA/ сайт]</b> с шифрованием. |  | |||
700}}<br>  | |||
{{ProductTable-2  | |||
|title-left= Response  | |||
|title-right=   | |||
|content-left=   | |||
* '''access_token''': токен доступа. Используется при отправке запросов ФП  | |||
* '''token_type''': тип токена  | |||
* '''refresh_token''': использовать для обновления токена доступа после истечении срока жизни (либо повторно авторизоваться с токеном коннектора)  | |||
* '''expires_in''': срок жизни токена доступа в секундах.  | |||
* '''scope''': права работы с токеном  | |||
* '''user_id''': ID пользователя  | |||
|content-right=   | |||
<syntaxhighlight lang="JSON">  | |||
{  | |||
    access_token: "eyJhbGciOiJSUzI1NiI...YQqpk7w",  | |||
    token_type: "bearer",  | |||
    refresh_token: "dfowYbGcdiJSUzxs67.._782S_MQ",  | |||
    expires_in: 43199,  | |||
    scope: "read write",  | |||
    user_id: 4567  | |||
}  | |||
</syntaxhighlight>  | |||
|}}<br>  | |||
== Авторизацию в OAuth2 по refresh_token ==  | |||
{{ProductTable-2  | |||
|title-left='''Запрос'''  | |||
|title-right='''POST'''  | |||
|content-left= URL: https://kassa.bifit.com/cashdesk-api/v1/oauth/token  | |||
|content-right=  | |||
<syntaxhighlight>  | |||
https://kassa.bifit.com/cashdesk-api/v1/oauth/token  | |||
</syntaxhighlight>  | |||
|}}<br>  | |||
{{ProductTable-2  | |||
   |title-left= Request HEADERS  | |||
   |title-right='''HEADERS'''  | |||
   |content-left= отключение компрессии  | |||
   |content-right=  | |||
<syntaxhighlight lang="JSON">  | |||
Accept-Encoding: "deflate"  | |||
</syntaxhighlight>  | |||
|}}<br>  | |||
{{  | {{ProductTable-2  | ||
|title-left= Request Body  | |||
|title-right= type: '''x-www-form-urlencoded'''  | |||
|content-left=   | |||
* '''refresh_token''': значение '''refresh_token'''  | |||
* '''client_id''': передать значение ''"cashdesk-rest-client"''  | |||
* '''client_secret''': передать значение ''"cashdesk-rest-client"''  | |||
* '''grant_type''': передать значение ''"refresh_token"''  | |||
|content-right=   | |||
<syntaxhighlight lang="JSON">  | |||
refresh_token: "dfowYbGcdiJSUzxs67.._782S_MQ"  | |||
client_id: "cashdesk-rest-client"  | |||
client_secret: "cashdesk-rest-client"  | |||
grant_type: "refresh_token"  | |||
</syntaxhighlight>  | |||
|}}<br>  | |||
{{Note|'''Обратите внимание'''  | |||
Значение '''refresh_token''' передается в том же виде, в каком оно было получено в ответе на предыдущий запрос авторизации. Без изменений и дополнительного кодирования.|  | |||
700}}<br>  | |||
==   | {{ProductTable-2  | ||
|title-left= Response  | |||
|title-right=    | |||
|content-left=   | |||
* '''access_token''': токен доступа. Используется при отправке запросов ФП  | |||
* '''token_type''': тип токена  | |||
* '''refresh_token''': использовать для обновления токена доступа после истечении срока жизни (либо повторно авторизоваться с токеном коннектора)  | |||
* '''expires_in''': срок жизни токена доступа в секундах.  | |||
* '''scope''': права работы с токеном  | |||
* '''user_id''': ID пользователя  | |||
|content-right=   | |||
<syntaxhighlight lang="JSON">  | |||
{  | |||
    access_token: "eyJhbGciOiJSUzI1NiI...YQqpk7w",  | |||
    token_type: "bearer",  | |||
    refresh_token: "dfowYbGcdiJSUzxs67.._782S_MQ",  | |||
    expires_in: 43199,  | |||
    scope: "read write",  | |||
    user_id: 4567  | |||
}  | |||
</syntaxhighlight>  | |||
|}}<br>  | |||
== Авторизацию в OAuth2 при двухфакторной авторизации ==  | == Авторизацию в OAuth2 при двухфакторной авторизации ==  | ||
Двухфакторная авторизация это дополнительная защита пользователем своего аккаунта. Требует от пользователя дополнительного ввода кода подтверждения, отправленного в SMS на номер учетной записи, после стандартной процедуры авторизации. Включение двухфакторной авторизации производится пользователем самостоятельно в настройках организации (учетной записи). При авторизации клиентское приложение не знает включена ли в учетной записи возможность двухфакторной авторизации. Ниже описан механизм авторизации пользователя по паролю и порядок действий, в случае если в учетной записи задана двухфакторная авторизация.<br>  | |||
{{Note|'''Внимание''' На момент написания статьи '''21.04.2022''', включение механизма двухфакторной авторизации доступно только техническому персоналу '''ООО "БИФИТ КАССА"'''. Включение двухфакторной авторизации в набор типовых возможностей ЛК будет доступно позже|  | |||
1200}}  | |||
=== Шаг №1: Стандартная авторизация по паролю ===  | |||
{{ProductTable-2  | |||
|title-left='''Запрос'''  | |||
|title-right='''POST'''  | |||
|content-left= URL: https://kassa.bifit.com/cashdesk-api/v1/oauth/token  | |||
|content-right=  | |||
<syntaxhighlight>  | |||
https://kassa.bifit.com/cashdesk-api/v1/oauth/token  | |||
</syntaxhighlight>  | |||
|}}<br>  | |||
{{ProductTable-2  | |||
   |title-left= Request HEADERS  | |||
   |title-right='''HEADERS'''  | |||
   |content-left= отключение компрессии  | |||
   |content-right=  | |||
<syntaxhighlight lang="JSON">  | |||
Accept-Encoding: "deflate"  | |||
</syntaxhighlight>  | |||
|}}<br>  | |||
{{ProductTable-2  | |||
|title-left= Request Body  | |||
|title-right= type: '''x-www-form-urlencoded'''  | |||
|content-left=   | |||
* '''username''': логин учетной записи, передается в формате '''7xxxxxxxxxx'''  | |||
* '''password''': пароль, передается в виде зашифрованного хэш -> '''SHA-256 -> base64 urlencoded'''  | |||
* '''client_id''': передать значение ''"cashdesk-rest-client"''  | |||
* '''client_secret''': передать значение ''"cashdesk-rest-client"''  | |||
* '''grant_type''': передать значение ''"password"''  | |||
|content-right=   | |||
<syntaxhighlight lang="JSON">  | |||
username: "7xxxxxxxxxx"  | |||
password: "asdaldfkhj34o.......kljslkfas"  | |||
client_id: "cashdesk-rest-client"  | |||
client_secret: "cashdesk-rest-client"  | |||
grant_type: "password"  | |||
</syntaxhighlight>  | |||
|}}<br>  | |||
{{Note|'''Обратите внимание'''  | |||
Пароль передается в виде хэш суммы. Необходимо зашифровать пароль при помощи алгоритма '''SHA256''' и затем закодировать полученные данные по стандарту '''Вase64 urlencoded'''.<br>  | |||
Для удобства можно использовать данный <b>[https://caligatio.github.io/jsSHA/ сайт]</b> с шифрованием.|  | |||
700}}<br>  | |||
{{ProductTable-2  | |||
|title-left= Response  | |||
|title-right=   | |||
|content-left=   | |||
* '''error''': ошибка  | |||
* '''error_description''': описание ошибки  | |||
|content-right=   | |||
<syntaxhighlight lang="JSON">  | |||
{  | |||
  "error": "mfa_required",  | |||
  "error_description": "Требуется многофакторная аутентификация"  | |||
}  | |||
</syntaxhighlight>  | |||
|}}<br>  | |||
{{Note|'''Обратите внимание'''  | |||
В случае если включена двухфакторная авторизация, сервер вернет ошибку '''401 Unauthorized''' в Response запроса будет содержать следующие данные..|  | |||
700}}  | |||
=== Шаг №2: Отправка SMS с кодом подтверждения на привязанный номер телефона ===  | |||
{{ProductTable-2  | |||
|title-left='''Запрос'''  | |||
|title-right='''POST'''  | |||
|content-left= '''7xxxxxxxxxx''' - авторизованный номер телефона на который будет отправлена SMS с кодом подтверждения  | |||
|content-right=  | |||
<syntaxhighlight>  | |||
https://kassa.bifit.com/cashdesk-api/v1/oauth/mfa?username=7xxxxxxxxxx  | |||
</syntaxhighlight>  | |||
|}}<br>  | |||
{{ProductTable-2  | |||
|title-left= Response  | |||
|title-right=   | |||
|content-left=   | |||
'''session_id''': Ответом на запрос будет значение session_id  | |||
|content-right=   | |||
<syntaxhighlight lang="JSON">  | |||
  590809155  | |||
</syntaxhighlight>  | |||
|}}<br>  | |||
=== Шаг №3: Отправка запроса на авторизацию с кодом из SMS ===  | |||
{{ProductTable-2  | |||
|title-left='''Запрос'''  | |||
|title-right='''POST'''  | |||
|content-left= URL: https://kassa.bifit.com/cashdesk-api/v1/oauth/token  | |||
|content-right=  | |||
<syntaxhighlight>  | |||
https://kassa.bifit.com/cashdesk-api/v1/oauth/token  | |||
</syntaxhighlight>  | |||
|}}<br>  | |||
{{ProductTable-2  | |||
|title-left= Request Body  | |||
|title-right= type: '''x-www-form-urlencoded'''  | |||
|content-left=   | |||
* '''username''': логин учетной записи, передается в формате '''7xxxxxxxxxx'''  | |||
* '''password''': пароль, передается в виде зашифрованного хэш -> '''SHA-256 -> base64 urlencoded'''  | |||
* '''session_id''': id сессии полученный, при отправке кода в SMS  | |||
* '''code''': код из полученной SMS  | |||
* '''client_id''': передать значение ''"cashdesk-rest-client"''  | |||
* '''client_secret''': передать значение ''"cashdesk-rest-client"''  | |||
* '''grant_type''': передать значение ''"password"''  | |||
|content-right=   | |||
<syntaxhighlight lang="JSON">  | |||
username: "7xxxxxxxxxx"  | |||
password: "asdaldfkhj34o.......kljslkfas"  | |||
session_id: 590809155  | |||
code: 3021  | |||
client_id: "cashdesk-rest-client"  | |||
client_secret: "cashdesk-rest-client"  | |||
grant_type: "mfa"  | |||
</syntaxhighlight>  | |||
|}}<br>  | |||
{{Note|'''Обратите внимание'''  | |||
Пароль передается в виде хэш суммы. Необходимо зашифровать пароль при помощи алгоритма '''SHA256''' и затем закодировать полученные данные по стандарту '''Вase64 urlencoded'''.<br>  | |||
Для удобства можно использовать данный <b>[https://caligatio.github.io/jsSHA/ сайт]</b> с шифрованием.|  | |||
700}}<br>  | |||
{{ProductTable-2  | |||
|title-left= Response  | |||
|title-right=   | |||
|content-left=   | |||
* '''access_token''': токен доступа. Используется при отправке запросов ФП  | |||
* '''token_type''': тип токена  | |||
* '''refresh_token''': использовать для обновления токена доступа после истечении срока жизни (либо повторно авторизоваться с токеном коннектора)  | |||
* '''expires_in''': срок жизни токена доступа в секундах.  | |||
* '''scope''': права работы с токеном  | |||
* '''user_id''': ID пользователя  | |||
|content-right=   | |||
<syntaxhighlight lang="JSON">  | |||
{  | |||
    access_token: "eyJhbGciOiJSUzI1NiI...YQqpk7w",  | |||
    token_type: "bearer",  | |||
    refresh_token: "dfowYbGcdiJSUzxs67.._782S_MQ",  | |||
    expires_in: 43199,  | |||
    scope: "read write",  | |||
    user_id: 4567  | |||
}  | |||
</syntaxhighlight>  | |||
|}}<br>  | |||
Текущая версия на 16:17, 17 июля 2023
Общие сведения
API (Application Programming Interface или интерфейс программирования приложений) — совокупность инструментов и функций в виде интерфейса для создания новых приложений и интеграции с ИС. Все запросы к сервису БИФИТ Бизнес осуществляются при помощи авторотационного токена - access_token. Для генерации токена, необходимо пройти процедуру авторизации OAuth2. Для этого необходимо использовать логин/пароль зарегистрированной учетной записи.
Информация получаемая по OAuth2:
- access_token — авторотационный ключ (обычно просто набор символов), предъявление которого является пропуском к защищенным ресурсам. Обращение к ним в самом простом случае происходит по HTTPS. Используется при работе по API
 - refresh_token — ключ, по которому можно получить access token с помощью HTTP-запроса, аналогично авторизации по логину и паролю
 - expires_in - время работы (протухания) access_token в секундах. В сервисе БИФИТ Бизнес составляет 12 часов или 43 200 секунд - 1 секунда = 43 199 секунд.
 
 Внимание 
Учетная запись от имени которой будет происходить работа по API должна иметь максимальное кол-во прав, для создания, редактирования или удаления документов и справочников БИФИТ Касса
Авторизацию в OAuth2 по паролю
| Запрос | POST | 
| URL: https://kassa.bifit.com/cashdesk-api/v1/oauth/token | https://kassa.bifit.com/cashdesk-api/v1/oauth/token | 
   
| Request HEADERS | HEADERS | 
| отключение компрессии | Accept-Encoding: "deflate"
 | 
   
| Request Body | type: x-www-form-urlencoded | 
 
  | 
       
username: "7xxxxxxxxxx"
password: "asdaldfkhj34o.......kljslkfas"
client_id: "cashdesk-rest-client"
client_secret: "cashdesk-rest-client"
grant_type: "password"
 | 
   
 Обратите внимание
Пароль передается в виде хэш суммы. Необходимо зашифровать пароль при помощи алгоритма SHA256 и затем закодировать полученные данные по стандарту Вase64 urlencoded.
Для удобства можно использовать данный сайт с шифрованием. 
| Response | |
 
  | 
       
{
    access_token: "eyJhbGciOiJSUzI1NiI...YQqpk7w",
    token_type: "bearer",
    refresh_token: "dfowYbGcdiJSUzxs67.._782S_MQ",
    expires_in: 43199,
    scope: "read write",
    user_id: 4567
}
 | 
   
Авторизацию в OAuth2 по refresh_token
| Запрос | POST | 
| URL: https://kassa.bifit.com/cashdesk-api/v1/oauth/token | https://kassa.bifit.com/cashdesk-api/v1/oauth/token | 
   
| Request HEADERS | HEADERS | 
| отключение компрессии | Accept-Encoding: "deflate"
 | 
   
| Request Body | type: x-www-form-urlencoded | 
 
  | 
       
refresh_token: "dfowYbGcdiJSUzxs67.._782S_MQ"
client_id: "cashdesk-rest-client"
client_secret: "cashdesk-rest-client"
grant_type: "refresh_token"
 | 
   
 Обратите внимание
Значение refresh_token передается в том же виде, в каком оно было получено в ответе на предыдущий запрос авторизации. Без изменений и дополнительного кодирования.
| Response | |
 
  | 
       
{
    access_token: "eyJhbGciOiJSUzI1NiI...YQqpk7w",
    token_type: "bearer",
    refresh_token: "dfowYbGcdiJSUzxs67.._782S_MQ",
    expires_in: 43199,
    scope: "read write",
    user_id: 4567
}
 | 
   
Авторизацию в OAuth2 при двухфакторной авторизации
Двухфакторная авторизация это дополнительная защита пользователем своего аккаунта. Требует от пользователя дополнительного ввода кода подтверждения, отправленного в SMS на номер учетной записи, после стандартной процедуры авторизации. Включение двухфакторной авторизации производится пользователем самостоятельно в настройках организации (учетной записи). При авторизации клиентское приложение не знает включена ли в учетной записи возможность двухфакторной авторизации. Ниже описан механизм авторизации пользователя по паролю и порядок действий, в случае если в учетной записи задана двухфакторная авторизация.
 Внимание На момент написания статьи 21.04.2022, включение механизма двухфакторной авторизации доступно только техническому персоналу ООО "БИФИТ КАССА". Включение двухфакторной авторизации в набор типовых возможностей ЛК будет доступно позже
Шаг №1: Стандартная авторизация по паролю
| Запрос | POST | 
| URL: https://kassa.bifit.com/cashdesk-api/v1/oauth/token | https://kassa.bifit.com/cashdesk-api/v1/oauth/token | 
   
| Request HEADERS | HEADERS | 
| отключение компрессии | Accept-Encoding: "deflate"
 | 
   
| Request Body | type: x-www-form-urlencoded | 
 
  | 
       
username: "7xxxxxxxxxx"
password: "asdaldfkhj34o.......kljslkfas"
client_id: "cashdesk-rest-client"
client_secret: "cashdesk-rest-client"
grant_type: "password"
 | 
   
 Обратите внимание
Пароль передается в виде хэш суммы. Необходимо зашифровать пароль при помощи алгоритма SHA256 и затем закодировать полученные данные по стандарту Вase64 urlencoded.
Для удобства можно использовать данный сайт с шифрованием.
| Response | |
 
  | 
       
{
  "error": "mfa_required",
  "error_description": "Требуется многофакторная аутентификация"
}
 | 
   
 Обратите внимание
В случае если включена двухфакторная авторизация, сервер вернет ошибку 401 Unauthorized в Response запроса будет содержать следующие данные..
Шаг №2: Отправка SMS с кодом подтверждения на привязанный номер телефона
| Запрос | POST | 
| 7xxxxxxxxxx - авторизованный номер телефона на который будет отправлена SMS с кодом подтверждения | https://kassa.bifit.com/cashdesk-api/v1/oauth/mfa?username=7xxxxxxxxxx | 
   
| Response | |
| session_id: Ответом на запрос будет значение session_id |  
  590809155
 | 
   
Шаг №3: Отправка запроса на авторизацию с кодом из SMS
| Запрос | POST | 
| URL: https://kassa.bifit.com/cashdesk-api/v1/oauth/token | https://kassa.bifit.com/cashdesk-api/v1/oauth/token | 
   
| Request Body | type: x-www-form-urlencoded | 
 
  | 
       
username: "7xxxxxxxxxx"
password: "asdaldfkhj34o.......kljslkfas"
session_id: 590809155
code: 3021
client_id: "cashdesk-rest-client"
client_secret: "cashdesk-rest-client"
grant_type: "mfa"
 | 
   
 Обратите внимание
Пароль передается в виде хэш суммы. Необходимо зашифровать пароль при помощи алгоритма SHA256 и затем закодировать полученные данные по стандарту Вase64 urlencoded.
Для удобства можно использовать данный сайт с шифрованием.
| Response | |
 
  | 
       
{
    access_token: "eyJhbGciOiJSUzI1NiI...YQqpk7w",
    token_type: "bearer",
    refresh_token: "dfowYbGcdiJSUzxs67.._782S_MQ",
    expires_in: 43199,
    scope: "read write",
    user_id: 4567
}
 |