Skip to main content

Общая информация

Для работы с большинством методов BPM API необходимо передавать в своих запросах в заголовке Autorization специальный ключ доступа — access токен (далее просто ключ). Он представляет собой строку из латинских букв и цифр. Существует несколько видов таких ключей:

Статический

Статический (сервисный) ключ api_key. Выдаётся разработчиками по личному запросу и может использоваться с методами, которые не требуют других авторизаций. Такой ключ ни к чему не привязывается и имеет неограниченный срок действия. Если ключ был скомпрометирован, вы можете запросить новый ключ, при этом старый будет аннулирован. Статический ключ доступа можно использовать только для запросов с серверной стороны приложения, его нельзя передавать и хранить на клиенте. Такой ключ не имеет расшифровки, а в заголовке Autorization используется с префиксом Token:

Token ublfjlZ9aHpAfFH49IxQGgQE6hXJfjtciaqhG81M

Ключ пользователя

Такой ключ выдаётся пользователю BPM после выполнения регистрационных/авторизационных действий. Ключ пользователя — это своего рода «подпись» в BPM. Ключ сообщает серверу, от имени какого пользователя осуществляются запросы и какие права у него есть. Полученный ключ необходимо использовать с префиксом Bearer, например:

Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzA1MzcyNzYyLCJpYXQiOjE3MDUzNzI1ODIsImp0aSI6IjdkZTFjYmJhYTBmZTQxNWM4ODgyMDdjNDU2Mjg5ZWM3IiwiaWRfdXNlciI6MTk5NTgxNX0.VGEFWXgI1pCMxO_D033QgxO2zX41kte5tdYfULhJlPs

Время жизни ключа составляет 3 минуты, а его расшифровка содержит следующую информацию:

header
{
"alg": "HS256",
"typ": "JWT"
}
payload
{
"token_type": "access",
"exp": 1695170577,
"iat": 1695170397,
"jti": "434dea97d98049dc9d15d1aebc2fa904",
"id_user": 118
}

Обновление пары ключей

После выполнения регистрационных/авторизационных действий помимо access токена сервер одновременно присылает еще один токен - refresh (далее рефреш токен), он также представляет собой строку из латинских букв и цифр. Рефреш токен обладает более долгим временем жизни, в нашем случае до 30 минут, и используется для обновления обоих токенов (пары ключей), как дополнительный гарант безопасности.

Так как если каким-то образом ключ пользователя (access токен) будет скомпрометирован, злоумышленник сможет действовать от имени пользователя ограниченное кол-во времени, в нашем случае до 3 минут. Пример ключа:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTcwNTM3NDM4MiwiaWF0IjoxNzA1MzcyNTgyLCJqdGkiOiI3MzZjMmQ0MmU3NTA0ZjE4ODJmZGMxZDI2YzliY2UwYiIsImlkX3VzZXIiOjE5OTU4MTV9.qPdXosCwjsTZciHacQgTB0Z7dUnT6E9VHZZGIH54RNA

Рефреш токен является одноразовым и после использования также обновляется, если же время жизни рефреш токена истекло, пользователю придется повторить авторизационные действия, чтобы снова получить пару ключей. Рефреш токен имеет следующую расшифровку:

header
{
"alg": "HS256",
"typ": "JWT"
}
payload
{
"token_type": "refresh",
"exp": 1695171568,
"iat": 1695169768,
"jti": "623b674cbcac45ad87f62de975451fbc",
"id_user": 118
}

Другие авторизации

Внешняя система (например чат CRM), для интеграции со своими службами, может запросить JWT token. Для его формирования в BPM создается пара ключей, из которой public_key передается внешней системе для проверки сигнатуры JWT token. Время жизни токена по умолчанию составляет 10 минут, но существует возможность гибкой настройки этого времени под требования внешней системы. JWT token также используется с префиксом Bearer:

Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2JwbXMuc3R1ZGlvIiwic3ViIjoiYnBtIGFwaSIsImF1ZCI6IkNSTSBDaGF0IiwiaWF0IjoxNjkyMjkxNTIwLCJleHAiOjE2OTIyOTIxMjAsImlkQlBNIjoxMTgsImlkTE1TIjpudWxsfQ.vCqPwJ6_A0yl0bMd1T4IH0Z4qCj0Gi6visxBODTvzycfR1-V_hCG40h9DeQPFcvanRUH2Ks4xopzA61tnnLb9KtuEnYSmJ4W8p6HTA5ykKGTTMEMuapXrAQVRELsXat8m9iM0vw-miJqYSPOdj7xShz6uUjs2QTIkTBiDYjDZoZMoLkJRtaP1_WVbn9gTdDepBoOWgzuganJrIOr6A0VGd3S3QQY33yAhs9oyteLhQvGTT537tqlZNr1ifTXsez6m_X6Qg0ox0zmX48e601rgX5U44C_G6vwoIkzJDtQqLKCTtOcTn8zC08Fh9YFkz4uJTKuR2USZgv9BWoX6S8VCA

А в расшифровке содержит следующую информацию:

header
{
"alg": "RS256",
"typ": "JWT"
}
payload
{
"iss": "192.168.4.127:8000",
"sub": "117",
"aud": "https://chat.2pp.dev",
"iat": 1712776981,
"exp": 1712777581,
"idBPM": 117,
"idLMS": null
}

Выход из системы

Выход текущего пользователя из системы можно осуществить принудительно, но как уже отмечалось ранее, выход производится автоматически, если по какой-то причине обновление пары ключей не удалось, а время жизни refresh токена истекло. Такая мера необходима для снижения рисков несанкционированного доступа к конфиденциальной информации пользователя, который вероятно прекратил работу с BPMS и неактивен более 30 минут.