Здравствуйте. Хочу получить срок жизни токена Честного знака (для автоматического запроса на генерацию нового токена). Из исходных данных: есть сам токен полученный от Честного знака и Платформа 8.2,в которой нужно получить время жизни токена. Как я понимаю,сам токен состоит Этот токен содержит 3 части:
заголовок (Header)
{
"alg": "HS256",
"typ": "JWT"
}
данные (Payload)
{}
подпись (Signature)
Собственно в секции Payload и содержится время жизни токена.
При попытки запихать в Base64Значение(Токен)-исходный токен, мне возвращает с только первая секция: заголовок (Header). Остальное теряется при преобразовании.
Нашел пример на С#, там ребята просто строку между двумя точками выдернули и подсунули в метод С# Convert.FromBase64String. При этом они еще добавляют фиктивные данные в строку, если строка получается не полной для работы метода. Попробовал выдернуть только секцию данные (Payload) и подсунуть в Base64Значение -сразу получаю ошибку "Входная строка не является строкой в формате Base64". Т.е. где то что то теряется.
Онлайн декодировщики пробовал вставлять полный токен- декодирование проходит нормально; если только секцию данные (Payload)-выдает ошибку "Входные данные не являются действительной строкой Base-64, поскольку содержат символ в кодировке, отличной от Base 64, больше двух символов заполнения или недопустимый символ среди символов заполнения". Как я понимаю нарушена структура строки base64.
СимволыПС и ВК -удалял, ошибки остаются.
Статей много нашел на тему декодирования, но они либо на свежие платформы 8.3 либо предлагают использовать внешние библиотеки. Хотелось бы реализацию стандартными методами 8.2 получить.
Может кто разъяснить как можно разобрать токен на строки?
Функция ДвоичныеДанныеЭлементаТокенаJWT(Знач Значение)
Значение = СтрЗаменить(Значение, "-", "+");
Значение = СтрЗаменить(Значение, "_", "/");
Остаток = СтрДлина(Значение) % 4;
Если Остаток = 1 Тогда
Возврат Неопределено;
ИначеЕсли Остаток = 2 Тогда
Значение = Значение + "==";
ИначеЕсли Остаток = 3 Тогда
Значение = Значение + "=";
КонецЕсли;
(2) ООО,сработало. У меня в коде не было вот этого:
Значение = СтрЗаменить(Значение, "-", "+");
Значение = СтрЗаменить(Значение, "_", "/");
я что то сам не нашел символы ,которые должны экранироваться.
И вот это:
Если Остаток = 1 Тогда
Возврат Неопределено;
не понятно,почему должно возвращать Неопределено? По идеи должно быть Значение = Значение + "===";
Спасибо огромное,пойду допиливать дальше
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший