|
JWT Токен. Тип Число в полезной нагрузке | ☑ | ||
---|---|---|---|---|
0
gogn
13.02.23
✎
10:59
|
Всем привет!
Столкнулся с проблемой относительно нового объекта ТокенДоступа, который формирует jwt токен. Если использую такой код: // формируем токен Токен = Новый ТокенДоступа(); Токен.ПолезнаяНагрузка.Вставить("tst", 246); То когда расшифровываю получившийся токен на https://jwt.io/ получаю: { "tst": "246" } Т.е. число неявно преобразовалось в строку, а нужно вот так: { "tst": 246 } Есть идеи как этому помешать? Api, для которого я готовлю токен, требует именно тип число, в дате начала действия, в дате завершения, и строки не принимает. Спасибо! |
|||
1
hockeyist
13.02.23
✎
11:38
|
(0) Видимо, недоделали. Делайте токен самостоятельно
|
|||
2
Проводкин
13.02.23
✎
11:43
|
(0) а если число более 999 триады появятся и пробелы в переводе в строку
|
|||
3
gogn
13.02.23
✎
12:16
|
(1) Есть хорошие варианты? dll может готовые или сервисы с доступным api?
|
|||
4
hockeyist
13.02.23
✎
12:32
|
(3) Не знаю. Я бы сам сделал. Быстрее выйдет, чем искать инструмент. Что там делать-то? json+точка+json+подпись
|
|||
5
hockeyist
13.02.23
✎
12:33
|
json+точка+json+точка+подпись
|
|||
6
gogn
13.02.23
✎
12:37
|
(5) Зашифровать же надо json еще как-то, и из подписи там же не все берется.
|
|||
7
hockeyist
13.02.23
✎
13:49
|
(6) Зашифровать можно попробовать методом платформы
|
|||
8
gogn
15.02.23
✎
11:50
|
Платформа сама не умеет шифровать.
В общем решил так: 1. Формируем руками json, тупо как строки. Хеадер отдельно, пэйлоад отдельно. 2. И хеадер и пейлоад кодируем с помощью такого кода: Encoded = Base64Строка(ПолучитьДвоичныеДанныеИзСтроки(ПэйЛоад)); Encoded = СтрЗаменить(Encoded, "=", ""); Encoded = СтрЗаменить(Encoded, "+", "-"); Encoded = СтрЗаменить(Encoded, "/", "_"); Encoded = СтрЗаменить(Encoded, Символы.ВК, ""); Encoded = СтрЗаменить(Encoded, Символы.ПС, ""); Encoded = СтрЗаменить(Encoded, "¶", ""); ПэйЛоад = Encoded; 3. Собираем ИтоговаяСтрока = Хеадер + "." + ПэйЛоад; 4. Дальше хешируем и подписываем хеш с помощью библиотеки "System.Security.Cryptography.RSACryptoServiceProvider" RSACSP = Новый COMОбъект("System.Security.Cryptography.RSACryptoServiceProvider"); RSACSP.FromXmlString(Ключ); // закрытый ключ в xml формате, можно получить из файла .pem на https://raskeyconverter.azurewebsites.net/PemToXml?handler=ConvertXML Хэширования = Новый ХешированиеДанных(ХешФункция.SHA256); Хэширования.Добавить(ИтоговаяСтрока); ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); Хэширования.ХешСумма.Записать(ИмяВременногоФайла); Поток = Новый COMОбъект("ADODB.Stream"); Поток.Open(); Поток.Type = 1; Поток.LoadFromFile(ИмяВременногоФайла); ДвоичныеДанные = Поток.Read(-1);; Поток.Close(); Поток = Неопределено; Подпись = RSACSP.SignHash(ДвоичныеДанные, "SHA256"); RSACSP = Неопределено; ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); Поток = Новый COMОбъект("ADODB.Stream"); Поток.Open(); Поток.Type = 1; Поток.Write(Подпись); Поток.SaveToFile(ИмяВременногоФайла, 1); Поток.Close(); Поток = Неопределено; ДвоичныеДанные = Новый ДвоичныеДанные(ИмяВременногоФайла); УдалитьФайлы(ИмяВременногоФайла); Encoded = Base64Строка(ДвоичныеДанные); Encoded = СтрЗаменить(Encoded, "=", ""); Encoded = СтрЗаменить(Encoded, "+", "-"); Encoded = СтрЗаменить(Encoded, "/", "_"); Encoded = СтрЗаменить(Encoded, Символы.ВК, ""); Encoded = СтрЗаменить(Encoded, Символы.ПС, ""); Encoded = СтрЗаменить(Encoded, "¶", ""); ПодписанныйТокен = ИтоговаяСтрока + "." + Encoded; Пользуйтесь. |
|||
9
novichok79
15.02.23
✎
12:19
|
погодите, ПолезнаяНагрузка = это типа payload по-русски.
прикольно, они там переводят. |
|||
10
gogn
16.02.23
✎
06:42
|
(9) Да, прям так максимально дословно и перевели)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |