|
7 | 7 |
|
8 | 8 | ВсеТесты.Добавить("ТестДолжен_ПроверитьКонструкторПоУмолчанию"); |
9 | 9 | ВсеТесты.Добавить("ТестДолжен_ПроверитьКонструкторСЗаголовкамиИПолезнойНагрузкой"); |
| 10 | + ВсеТесты.Добавить("ТестДолжен_ПроверитьГенерациюТокена"); |
10 | 11 | ВсеТесты.Добавить("ТестДолжен_ПроверитьГенерациюТокенаСКлючом"); |
11 | 12 | ВсеТесты.Добавить("ТестДолжен_ПроверитьГенерациюТокенаБезКлюча"); |
12 | 13 | ВсеТесты.Добавить("ТестДолжен_ПроверитьОшибкуПриПодписиБезКлюча"); |
|
30 | 31 | юТест.ПроверитьРавенство(Токен.ПолезнаяНагрузка.Количество(), 0); |
31 | 32 | юТест.ПроверитьРавенство(Токен.Получатели.Количество(), 0); |
32 | 33 |
|
| 34 | + РазобранныйТокен = РазобратьJWT(Токен); |
| 35 | + юТест.ПроверитьРавенство(РазобранныйТокен.Заголовки, "{""alg"":""none""}", "Заголовки"); |
| 36 | + юТест.ПроверитьРавенство(РазобранныйТокен.ПолезнаяНагрузка, "{}", "Полезная нагрузка"); |
| 37 | + |
33 | 38 | КонецПроцедуры |
34 | 39 |
|
35 | 40 | Процедура ТестДолжен_ПроверитьКонструкторСЗаголовкамиИПолезнойНагрузкой() Экспорт |
|
43 | 48 | ПолезнаяНагрузка["name"] = "Test User"; |
44 | 49 |
|
45 | 50 | Токен = Новый ТокенДоступа(Заголовки, ПолезнаяНагрузка); |
| 51 | + РазобранныйТокен = РазобратьJWT(Токен); |
46 | 52 |
|
47 | 53 | юТест.ПроверитьРавенство(Токен.Заголовки.Количество(), 2); |
48 | 54 | юТест.ПроверитьРавенство(Токен.ПолезнаяНагрузка.Количество(), 2); |
49 | 55 | юТест.ПроверитьРавенство(Токен.Заголовки["typ"], "JWT"); |
50 | 56 | юТест.ПроверитьРавенство(Токен.Заголовки["any"], "some"); |
51 | 57 | юТест.ПроверитьРавенство(Токен.ПолезнаяНагрузка["sub"], "user123"); |
52 | 58 | юТест.ПроверитьРавенство(Токен.ПолезнаяНагрузка["name"], "Test User"); |
| 59 | + юТест.ПроверитьРавенство(РазобранныйТокен.Заголовки, "{""alg"":""none"",""typ"":""JWT"",""any"":""some""}", "Заголовки"); |
| 60 | + юТест.ПроверитьРавенство(РазобранныйТокен.ПолезнаяНагрузка, "{""sub"":""user123"",""name"":""Test User""}", "Полезная нагрузка"); |
| 61 | + |
| 62 | +КонецПроцедуры |
| 63 | + |
| 64 | +Процедура ТестДолжен_ПроверитьГенерациюТокена() Экспорт |
| 65 | + |
| 66 | + Токен = Новый ТокенДоступа(); |
| 67 | + Токен.ВремяЖизни = 3600; |
| 68 | + Токен.ВремяСоздания = 1640995200; // 2022-01-01 00:00:00 UTC |
| 69 | + Токен.Идентификатор = "unique-token-id"; |
| 70 | + Токен.КлючСопоставленияПользователя = "[email protected]"; |
| 71 | + Токен.Эмитент = "https://auth.example.com"; |
| 72 | + |
| 73 | + Токен.Заголовки["typ"] = "JWT"; |
| 74 | + |
| 75 | + Токен.ПолезнаяНагрузка["role"] = "admin"; |
| 76 | + Токен.ПолезнаяНагрузка["permissions"] = "read,write,delete"; |
| 77 | + |
| 78 | + Токен.Получатели.Добавить("api.example.com"); |
| 79 | + Токен.Получатели.Добавить("mobile.app"); |
| 80 | + |
| 81 | + РазобранныйТокен = РазобратьJWT(Токен); |
| 82 | + |
| 83 | + юТест.ПроверитьРавенство(РазобранныйТокен.Заголовки, "{""alg"":""none"",""typ"":""JWT""}", "Заголовки"); |
| 84 | + юТест.ПроверитьРавенство(РазобранныйТокен.ПолезнаяНагрузка , "{""iss"":""https://auth.example.com"",""iat"":1640995200,""nbf"":1640995200,""exp"":1640998800,""jti"":""unique-token-id"",""sub"":""[email protected]"",""aud"":[""api.example.com"",""mobile.app""],""role"":""admin"",""permissions"":""read,write,delete""}", "Полезная нагрузка") ; |
53 | 85 |
|
54 | 86 | КонецПроцедуры |
55 | 87 |
|
|
153 | 185 | Токен.ПолезнаяНагрузка.Вставить("Соответствие", Соответствие); |
154 | 186 |
|
155 | 187 | РазобранныйТокен = РазобратьJWT(Токен); |
156 | | - |
| 188 | + |
157 | 189 | юТест.ПроверитьРавенство(РазобранныйТокен.ПолезнаяНагрузка, ОжидаемоеЗначение); |
158 | 190 |
|
159 | 191 | КонецПроцедуры |
|
227 | 259 | КонецЕсли; |
228 | 260 |
|
229 | 261 | Возврат Значение + Паддинг; |
| 262 | + |
230 | 263 | КонецФункции |
231 | 264 |
|
232 | 265 | // 2048 bits, PKCS#8 |
|
0 commit comments