jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ

JSON Web Token ΠΈ sliding expiration Π² web-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ

Π’ web-прилоТСниях Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнным ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΄ΠΎ настоящСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ являлось использованиС Ρ„Π°ΠΉΠ»ΠΎΠ² cookies, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хранят ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ сСрвСрной сСссии ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ свой срок годности (expiration date). ΠŸΡ€ΠΈ этом сущСствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ эту Π΄Π°Ρ‚Ρƒ автоматичСски ΠΏΡ€ΠΎΠ΄Π»Π΅Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π° сСрвСр. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ носит Π½Π°Π·Π²Π°Π½ΠΈΠ΅ sliding expiration.

Π‘Π°ΠΌ JWT, Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ cookie, ΠΈΠΌΠ΅Π΅Ρ‚ свою Π΄Π°Ρ‚Ρƒ ‘протухания’ (expiration date) ΠΈ Π² ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ случаС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ с использованиСм refresh token довольно сильно услоТняСт, ΠΊΠ°ΠΊ клиСнтский, Ρ‚Π°ΠΊ ΠΈ сСрвСрный ΠΊΠΎΠ΄. ΠŸΡ€ΠΈ этом ΠΎΠ½ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ всС refresh token-Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ вмСстС с Client id ΠΈ ΠΏΡ€ΠΎΡ‡Π΅ΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ.

Π’ случаС Ссли ΠΆΠ΅ Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ бСсконСчно ΠΌΠΎΠ³ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ рСсурсом послС Π²Ρ…ΠΎΠ΄Π°, прСдлагаСтся Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ sliding expiration для Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ². Π’ΠΎ Π΅ΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ (ΠΏΠ΅Ρ€Π²ΠΎΠΌ) случаС ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ access token-Π° сСрвСр ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΊ expiration date (ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·) отправляСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π½ΠΎΠ²Ρ‹ΠΉ access token со сдвинутой Π΄Π°Ρ‚ΠΎΠΉ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π² случаС ΠΊΡ€Π°ΠΆΠΈ Ρ‚ΠΎΠΊΠ΅Π½Π°, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ бСсконСчно ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ рСсурсом.

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС производится Ρ‚ΠΎ ΠΆΠ΅ самоС, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для refresh token-Π°.

Π’ΠΎΡ‚ собствСнно всС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π½Π°ΠΉΡ‚ΠΈ. Π― ΠΆΠ΅ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒΡΡ для простоты Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ access token-ΠΎΠΌ, Π½ΠΎ ΠΏΡ€ΠΈ этом ΠΈΠΌΠ΅Ρ‚ΡŒ sliding expiration ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΡ€Π°Π²Π° ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Π² доступС Ρ‚ΠΎΠΊΠ΅Π½, Π² случаС Π΅Π³ΠΎ ΠΊΡ€Π°ΠΆΠΈ.

Для этого я Π±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π² Ρ‚ΠΎΠΊΠ΅Π½ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ RefreshDate (Π΄Π°Ρ‚Ρƒ послС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ‚ΠΎΠΊΠ΅Π½ трСбуСтся ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ; Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ мСньшС, Ρ‡Π΅ΠΌ expiration date, Ссли ΠΎΠ½Π° ΡƒΠΊΠ°Π·Π°Π½Π°) ΠΈ Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅ β€” MinRefreshDate. Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π΄Π°Ρ‚Ρƒ RefreshDate, которая Π²Π°Π»ΠΈΠ΄Π½Π° для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. ΠŸΡ€ΠΈ этом для ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Ρ‚ΠΎΠΊΠ΅Π½Π° MinRefreshDate Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ нСпустой ΠΈ всСгда Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ мСньшС, Ρ‡Π΅ΠΌ RefreshDate самого Ρ‚ΠΎΠΊΠ΅Π½Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ трСбуСтся ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ.

ΠŸΡ€ΠΈ этом процСсс использования выглядСл Π±Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

Π― Π½Π΅ ΠΏΠΈΡ‚Π°ΡŽ иллюзий, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ интСрСсСн ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, Π½ΠΎ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΡƒΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ ΠΌΠ½Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ Ρ‚ΠΎΠ³ΠΎ, насколько всС это бСзопасно ΠΈ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΠΎ для Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ использования.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Как Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ врСмя ΠΆΠΈΠ·Π½ΠΈ Ρ‚ΠΎΠΊΠ΅Π½Π° JWT?

ΠŸΠΎΠ΄ΡΠΊΠ°ΠΆΠΈΡ‚Π΅ поТалуйста, ΠΊΠ°ΠΊ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ врСмя ΠΆΠΈΠ·Π½ΠΈ Ρ‚ΠΎΠΊΠ΅Π½Π° (JWT-token ΠΈ JWT-passport), Ссли Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΎΡΡŒ врСмя, я Π΅Π³ΠΎ Ρ…Ρ€Π°Π½ΡŽ Π² localstorage?
Π£ мСня ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΌΠ°Π³Π°Π·ΠΈΠ½ всС Ρ‚ΠΎΠ²Π°Ρ€Ρ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽ Π²ΠΎ Vuex ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ сайта, Ρ‚.Π΅. ΠΊ сСрвСру ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡΡŒ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·.
Π― Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΌΠΎΠ³Ρƒ ΡΠΎΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ Π±Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½, Ссли я Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡΡŒ ΠΊ сСрвСру.
Если врСмя Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΎΡΡŒ, Ρ‚ΠΎ Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ.

ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ 8 ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π²

jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π€ΠΎΡ‚ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ

jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π€ΠΎΡ‚ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ

jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π€ΠΎΡ‚ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ

ЧСстно, я Ρ‚Π°ΠΊ ΠΈ Π½Π΅ понял ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ?!

p.s. Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ встывлСна Π΄Π°Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Π²ΠΎΡ‚ Π²Π°ΠΌ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΎΠΊΠ΅Π½Π° Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅

jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π€ΠΎΡ‚ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ

Π”Π°, Π²ΠΎΡ‚ Π²ΠΎΠ·Ρ€Π°Ρ‰Π°Π΅Ρ‚
jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π€ΠΎΡ‚ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ

Π― просто Π½Π΅ знаю ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ истСкло врСмя ΠΈΠ»ΠΈ Π½Π΅Ρ‚, Π΄ΡƒΠΌΠ°ΡŽ Ρ‡Π΅Ρ€Π΅Π· router.beforeEach ΠΈΠ»ΠΈ watch
ΠΈ Π² Π½ΠΈΡ… ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ сСрвСру?
Π’.ΠΊ. Π²Ρ‹ΡˆΠ΅ писали Ρ‡Ρ‚ΠΎ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅

jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π€ΠΎΡ‚ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ

jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π€ΠΎΡ‚ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠŸΡΡ‚ΡŒ простых шагов для понимания JSON Web Tokens (JWT)

jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π€ΠΎΡ‚ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽ Π²Π°ΠΌ ΠΌΠΎΠΉ довольно Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΡΡ‚Π°Ρ‚ΡŒΠΈ 5 Easy Steps to Understanding JSON Web Tokens (JWT). Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ рассказано ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ· сСбя ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ JSON Web Tokens (JWT) ΠΈ с Ρ‡Π΅ΠΌ ΠΈΡ… Сдят. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ Ρ€ΠΎΠ»ΡŒ ΠΎΠ½ΠΈ ΠΈΠ³Ρ€Π°ΡŽΡ‚ Π² ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ подлинности ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ обСспСчСнии бСзопасности Π΄Π°Π½Π½Ρ‹Ρ… прилоТСния.

Для Π½Π°Ρ‡Π°Π»Π° рассмотрим Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅.

JSON Web Token (JWT) β€” это JSON ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ стандартС RFC 7519. Он считаСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· бСзопасных способов ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя участниками. Для Π΅Π³ΠΎ создания Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ (header) с ΠΎΠ±Ρ‰Π΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎ Ρ‚ΠΎΠΊΠ΅Π½Ρƒ, ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ (payload), Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ id ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π΅Π³ΠΎ Ρ€ΠΎΠ»ΡŒ ΠΈ Ρ‚.Π΄. ΠΈ подписи (signature).
ΠšΡΡ‚Π°Ρ‚ΠΈ, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ JWT произносится ΠΊΠ°ΠΊ /dΚ’Ι’t/

jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π€ΠΎΡ‚ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ JWT для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° JWT

Π¨Π°Π³ 1. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ HEADER

Π₯Π΅Π΄Π΅Ρ€ JWT содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒΡΡ JWT подпись. Π₯Π΅Π΄Π΅Ρ€ β€” это Ρ‚ΠΎΠΆΠ΅ JSON ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π¨Π°Π³ 2. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ PAYLOAD

Payload β€” это ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хранятся Π²Π½ΡƒΡ‚Ρ€ΠΈ JWT. Π­Ρ‚ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ JWT-claims (заявки). Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ рассматриваСм ΠΌΡ‹, сСрвСр Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ создаСт JWT с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎΠ± id ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ β€” userId.

ΠœΡ‹ ΠΏΠΎΠ»ΠΎΠΆΠΈΠ»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ заявку (claim) Π² payload. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ заявок, сколько Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅. БущСствуСт список стандартных заявок для JWT payload β€” Π²ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ…:

Π­Ρ‚ΠΈ поля ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈ создании JWT, Π½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ. Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π½Π°Ρ‚ΡŒ вСсь список доступных ΠΏΠΎΠ»Π΅ΠΉ для JWT, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π² Wiki. Но стоит ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‡Π΅ΠΌ большС пСрСдаСтся ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Ρ‚Π΅ΠΌ больший получится Π² ΠΈΡ‚ΠΎΠ³Π΅ сам JWT. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ с этим Π½Π΅ Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π½ΠΎ всС-Ρ‚Π°ΠΊΠΈ это ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ Π²ΠΎ взаимодСйствии с сСрвСром.

Π¨Π°Π³ 3. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ SIGNATURE

Подпись вычисляСтся с использованиС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ псСвдо-ΠΊΠΎΠ΄Π°:

Алгоритм base64url ΠΊΠΎΠ΄ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ…Π΅Π΄Π΅Ρ€ ΠΈ payload, созданныС Π½Π° 1 ΠΈ 2 шагС. Алгоритм соСдиняСт Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ строки Ρ‡Π΅Ρ€Π΅Π· Ρ‚ΠΎΡ‡ΠΊΡƒ. Π—Π°Ρ‚Π΅ΠΌ получСнная строка Ρ…Π΅ΡˆΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ Π² Ρ…Π΅Π΄Π΅Ρ€Π΅ Π½Π° основС нашСго сСкрСтного ΠΊΠ»ΡŽΡ‡Π°.

Π¨Π°Π³ 4. Π’Π΅ΠΏΠ΅Ρ€ΡŒ объСдиним всС Ρ‚Ρ€ΠΈ JWT ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° вмСстС

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρƒ нас Π΅ΡΡ‚ΡŒ всС Ρ‚Ρ€ΠΈ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ…, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ наш JWT. Π­Ρ‚ΠΎ довольно просто, ΠΌΡ‹ соСдиняСм всС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ элСмСнты Π² строку Ρ‡Π΅Ρ€Π΅Π· Ρ‚ΠΎΡ‡ΠΊΡƒ.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой собствСнный JWT Π½Π° сайтС jwt.io.
ВСрнСмся ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ сСрвСр Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ JWT.

Как JWT Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ наши Π΄Π°Π½Π½Ρ‹Π΅?

ΠžΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ использованиС JWT НЕ скрываСт ΠΈ Π½Π΅ маскируСт Π΄Π°Π½Π½Ρ‹Π΅ автоматичСски. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎΡ‡Π΅ΠΌΡƒ JWT ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ β€” это ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ источником. Как Π±Ρ‹Π»ΠΎ продСмонстрировано Π²Ρ‹ΡˆΠ΅, Π΄Π°Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ JWT Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΈ подписаны, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, это Π½Π΅ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎ Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Ρ‹. ЦСль кодирования Π΄Π°Π½Π½Ρ‹Ρ… β€” ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ структуры. ΠŸΠΎΠ΄ΠΏΠΈΡΠ°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŽ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ источника Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ подпись Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ΠΈΡ…. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, главная Ρ†Π΅Π»ΡŒ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ β€” это Π·Π°Ρ‰ΠΈΡ‚Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ Π½Π΅Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ доступа. Для Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ объяснСния различия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, смотритС эту ΡΡ‚Π°Ρ‚ΡŒΡŽ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ JWT Ρ‚ΠΎΠ»ΡŒΠΊΠΎ лишь Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΈ подписана, ΠΈ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ JWT Π½Π΅ Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π°, JWT Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ бСзопасности для Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… (sensitive) Π΄Π°Π½Π½Ρ‹Ρ….

Π¨Π°Π³ 5. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° JWT

Π’ нашСм простом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΠ· 3 участников ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ JWT, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ подписан с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ HS256 Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сСрвСр Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ сСрвСр прилоТСния Π·Π½Π°ΡŽΡ‚ сСкрСтный ΠΊΠ»ΡŽΡ‡. Π‘Π΅Ρ€Π²Π΅Ρ€ прилоТСния ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сСкрСтный ΠΊΠ»ΡŽΡ‡ ΠΎΡ‚ сСрвСра Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π²ΠΎ врСмя установки Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… процСссов. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π½Π°Π΅Ρ‚ сСкрСтный ΠΊΠ»ΡŽΡ‡, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄Π΅Π»Π°Π΅Ρ‚ API-запрос с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ ΠΊ Π½Π΅ΠΌΡƒ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠΌ, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ подписывания ΠΊ JWT, Ρ‡Ρ‚ΠΎ Π² шагС 3. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ эту подпись, сравнивая Π΅Π΅ со своСй собствСнной, вычислСнной Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. Если подписи ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚, Π·Π½Π°Ρ‡ΠΈΡ‚ JWT Π²Π°Π»ΠΈΠ΄Π½Ρ‹ΠΉ, Ρ‚.Π΅. ΠΏΡ€ΠΈΡˆΠ΅Π» ΠΎΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½ΠΎΠ³ΠΎ источника. Если подписи Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚, Π·Π½Π°Ρ‡ΠΈΡ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ β€” Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, это являСтся ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π°Ρ‚Π°ΠΊΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, провСряя JWT, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ добавляСт Π΄ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ слой (a layer of trust) ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠœΡ‹ ΠΏΡ€ΠΎΡˆΠ»ΠΈΡΡŒ ΠΏΠΎ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ JWT, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΈ ΠΊΠ°ΠΊ Π²Π°Π»ΠΈΠ΄ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ для установлСния Π΄ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Но это лишь кусочСк ΠΏΠ°Π·Π»Π° большой Ρ‚Π΅ΠΌΡ‹ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ обСспСчСния Π·Π°Ρ‰ΠΈΡ‚Ρ‹ вашСго прилоТСния. ΠœΡ‹ рассмотрСли лишь основы, Π½ΠΎ Π±Π΅Π· Π½ΠΈΡ… Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ дальшС.

Π§Ρ‚ΠΎ дальшС?

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π¨ΠΏΠ°Ρ€Π³Π°Π»ΠΊΠΈ ΠΏΠΎ бСзопасности: JWT

jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π€ΠΎΡ‚ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ

МногиС прилоТСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ JSON Web Tokens (JWT), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сСбя для дальнСйшСго ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ послС Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ.

JSON Web Token – это ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ стандарт (RFC 7519), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ ΠΈ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹ΠΉ способ бСзопасной ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ сторонами Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° JSON.

jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ. Π€ΠΎΡ‚ΠΎ jwt token врСмя ΠΆΠΈΠ·Π½ΠΈ
Π­Ρ‚Π° информация являСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½ΠΎΠΉ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΉ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΈΠΌΠ΅Π΅Ρ‚ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΡƒΡŽ подпись.
JWT ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ подписаны с использованиСм сСкрСтного (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° HMAC) ΠΈΠ»ΠΈ ΠΏΠ°Ρ€Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ / сСкрСтного ΠΊΠ»ΡŽΡ‡Π΅ΠΉ с использованиСм RSA ΠΈΠ»ΠΈ ECDSA.

JSON Web Token ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΊΠ°ΡΠ°ΡŽΡ‰Π΅ΠΉΡΡ личности ΠΈ характСристик ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π­Ρ‚ΠΎΡ‚ Β«ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Β» подписываСтся сСрвСром, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ вмСшивался Π² Π½Π΅Π³ΠΎ ΠΈ Π½Π΅ ΠΌΠΎΠ³ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ характСристики (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€ΠΎΠ»ΡŒ с простого ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π° администратора ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠ½ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°).

Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΎΠΊΠ΅Π½ создаСтся Π² случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ провСряСтся сСрвСром ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ выполнСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ клиСнтского запроса. Π’ΠΎΠΊΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π² качСствС β€œΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€Π΅Π½ΠΈΡ личности” ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ со всСй ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ Π½Π΅ΠΌ). Π‘Π΅Ρ€Π²Π΅Ρ€ ΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½Π° бСзопасным способом. Π­Ρ‚ΠΎ позволяСт ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π±Ρ‹Ρ‚ΡŒ stateless (stateless ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ сохраняСт Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, сгСнСрированныС Π·Π° ΠΎΠ΄ΠΈΠ½ сСанс для использования Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ сСансС с этим ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ (ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ сСанс выполняСтся нСзависимо)), Π° процСссу Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ нСзависимым ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… сСрвисов (Π² Ρ‚ΠΎΠΌ смыслС, Ρ‡Ρ‚ΠΎ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ сСрвСра ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π΄Π°ΠΆΠ΅ транспортный ΠΊΠ°Π½Π°Π», хотя Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ HTTP).

БообраТСния ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ использования JWT

Π”Π°ΠΆΠ΅ Ссли Ρ‚ΠΎΠΊΠ΅Π½ JWT прост Π² использовании ΠΈ позволяСт ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ сСрвисы (Π² основном REST) Π±Π΅Π· сохранСния состояния (stateless), Ρ‚Π°ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π΅ для всСх ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ поставляСтся с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΊΠ°ΠΌΠΈ, ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, вопрос хранСния Ρ‚ΠΎΠΊΠ΅Π½Π°.

Если ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ stateless, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы сСссий, прСдоставляСмой всСми Π²Π΅Π±-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ. Однако для stateless ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ JWT – это Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Ссли ΠΎΠ½ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ Π°Ρ‚Π°ΠΊΠΈ, связанныС с JWT

ИспользованиС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ NONE

Подобная Π°Ρ‚Π°ΠΊΠ° происходит, ΠΊΠΎΠ³Π΄Π° Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ измСняСт Ρ‚ΠΎΠΊΠ΅Π½, Π° Ρ‚Π°ΠΊΠΆΠ΅ мСняСт Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ (ΠΏΠΎΠ»Π΅ β€œalg”), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово none, Ρ‡Ρ‚ΠΎ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½Π° ΡƒΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π°. НСкоторыС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ рассматривали Ρ‚ΠΎΠΊΠ΅Π½Ρ‹, подписанныС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° none, ΠΊΠ°ΠΊ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΎΠΊΠ΅Π½ с ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½ΠΎΠΉ подписью, поэтому Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ ΠΌΠΎΠ³ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ (payload) Ρ‚ΠΎΠΊΠ΅Π½Π°, ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ довСряло Π±Ρ‹ Ρ‚ΠΎΠΊΠ΅Π½Ρƒ.

Для прСдотвращСния Π°Ρ‚Π°ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ JWT, которая Π½Π΅ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Π° Π΄Π°Π½Π½ΠΎΠΉ уязвимости. Π’Π°ΠΊΠΆΠ΅ Π²ΠΎ врСмя ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ валидности Ρ‚ΠΎΠΊΠ΅Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ явно Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ использованиС ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

ΠŸΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ²

Атака происходит, ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΎΠΊΠ΅Π½ Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‡Π΅Π½ ΠΈΠ»ΠΈ ΡƒΠΊΡ€Π°Π΄Π΅Π½ Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠΎΠΌ ΠΈ ΠΎΠ½ примСняСт Π΅Π³ΠΎ для получСния доступа ΠΊ систСмС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Π—Π°Ρ‰ΠΈΡ‚Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Β«ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ контСкста» Π² Ρ‚ΠΎΠΊΠ΅Π½. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ контСкст Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ:

Если Π²ΠΎ врСмя ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΎΠΊΠ΅Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΎΠΊΠ΅Π½ Π½Π΅ содСрТит ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ контСкста, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½.
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ:

Код для создания Ρ‚ΠΎΠΊΠ΅Π½Π° послС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ:

Код для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ валидности Ρ‚ΠΎΠΊΠ΅Π½Π°:

Π―Π²Π½ΠΎΠ΅ Π°Π½Π½ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΎΠΊΠ΅Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚ΠΎΠΊΠ΅Π½ становится Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС истСчСния срока Π΅Π³ΠΎ дСйствия, Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π΅Ρ‚ встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΉ явно ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ дСйствиС Ρ‚ΠΎΠΊΠ΅Π½Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² случаС ΠΊΡ€Π°ΠΆΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ сам ΠΎΡ‚ΠΎΠ·Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½ ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰Π΅Π³ΠΎ.

Одним ΠΈΠ· способов Π·Π°Ρ‰ΠΈΡ‚Ρ‹ являСтся Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ списка Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π΅Π½ для ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Β«Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· систСмы», ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π² Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС сСансов.

Π’ Ρ‡Π΅Ρ€Π½ΠΎΠΌ спискС Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ сборник (Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ SHA-256 Π² HEX) Ρ‚ΠΎΠΊΠ΅Π½Π° с Π΄Π°Ρ‚ΠΎΠΉ аннулирования, которая Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ срок дСйствия Π²Ρ‹Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΎΠΊΠ΅Π½Π°.

Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Ρ…ΠΎΡ‡Π΅Ρ‚ Β«Π²Ρ‹ΠΉΡ‚ΠΈΒ», ΠΎΠ½ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ слуТбу, которая добавляСт прСдоставлСнный Ρ‚ΠΎΠΊΠ΅Π½ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ список, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΌΡƒ Π°Π½Π½ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Ρ‚ΠΎΠΊΠ΅Π½Π° для дальнСйшСго использования Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ списка:
Для Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ хранСния Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ списка Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ структурой:

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ аннулированиями Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ²:

РаскрытиС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ‚ΠΎΠΊΠ΅Π½Π΅

Π­Ρ‚Π° Π°Ρ‚Π°ΠΊΠ° происходит, ΠΊΠΎΠ³Π΄Π° Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ доступ ΠΊ Ρ‚ΠΎΠΊΠ΅Π½Ρƒ (ΠΈΠ»ΠΈ ΠΊ Π½Π°Π±ΠΎΡ€Ρƒ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ²) ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½Π΅Π½Π½ΡƒΡŽ Π² Π½Π΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ (информация ΠΎ Ρ‚ΠΎΠΊΠ΅Π½Π΅ JWT кодируСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ base64) для получСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ систСмС. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ, Ρ€ΠΎΠ»ΠΈ бСзопасности, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π²Ρ…ΠΎΠ΄Π° Π² систСму ΠΈ Ρ‚.Π΄.

Бпособ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ достаточно ΠΎΡ‡Π΅Π²ΠΈΠ΄Π΅Π½ ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‚ΠΎΠΊΠ΅Π½Π°. Π’Π°ΠΊΠΆΠ΅ Π²Π°ΠΆΠ½ΠΎ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚ Π°Ρ‚Π°ΠΊ с использованиСм ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ°Π½Π°Π»ΠΈΠ·Π°. Для достиТСния всСх этих Ρ†Π΅Π»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ AES-GCM, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обСспСчиваСт Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ с ассоциированными Π΄Π°Π½Π½Ρ‹ΠΌΠΈ (Authenticated Encryption with Associated Data – AEAD). ΠŸΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ² AEAD обСспСчиваСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ симмСтричного Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ. Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этого ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π° Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Ρ‹ ΠΎΡ‚ Π°Π΄Π°ΠΏΡ‚ΠΈΠ²Π½Ρ‹Ρ… Π°Ρ‚Π°ΠΊ Π½Π° основС ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΡˆΠΈΡ„Ρ€Ρ‚Π΅ΠΊΡΡ‚Π°. ΠŸΡ€ΠΈ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ тСкста ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ связанныС Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹, Π½ΠΎ Π½Π΅ Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Ρ‹.

Π’ΠΎ Π΅ΡΡ‚ΡŒ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ обСспСчиваСт ΠΏΠΎΠ΄Π»ΠΈΠ½Π½ΠΎΡΡ‚ΡŒ ΠΈ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ Π½Π΅ ΠΈΡ… ΡΠ΅ΠΊΡ€Π΅Ρ‚Π½ΠΎΡΡ‚ΡŒ.

Однако Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ добавляСтся Π² основном для сокрытия Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΎΡ‚ ΠΏΠΎΠ΄Π΄Π΅Π»ΠΊΠΈ Ρ‚ΠΎΠΊΠ΅Π½Π° JWT являСтся подпись, поэтому подпись Ρ‚ΠΎΠΊΠ΅Π½Π° ΠΈ Π΅Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹.

Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

Если ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ Ρ‚ΠΎΠΊΠ΅Π½ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΎΠ΄Π½Π° ΠΈΠ»ΠΈ нСсколько ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ситуаций:

ΠžΡΡ‚Π°Π΅Ρ‚ΡΡ случай, ΠΊΠΎΠ³Π΄Π° Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ контСкст просмотра ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² качСствС прокси-сСрвСра, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†Π΅Π»Π΅Π²ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· Π»Π΅Π³ΠΈΡ‚ΠΈΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π½ΠΎ Content Security Policy ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ связь с Π½Π΅ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Π½Π½Ρ‹ΠΌΠΈ Π΄ΠΎΠΌΠ΅Π½Π°ΠΌΠΈ.

Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ слуТбу Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚ΠΎΠΊΠ΅Π½ выдавался Π²Π½ΡƒΡ‚Ρ€ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° cookie, Π½ΠΎ Π² этом случаС Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ CSRF.

ИспользованиС слабого ΠΊΠ»ΡŽΡ‡Π° ΠΏΡ€ΠΈ создании Ρ‚ΠΎΠΊΠ΅Π½Π°

Если сСкрСт, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² случаС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° HMAC-SHA256, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для подписи Ρ‚ΠΎΠΊΠ΅Π½Π°, являСтся слабым, Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π·Π»ΠΎΠΌΠ°Π½ (ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Π½ c ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ‚Π°ΠΊΠΈ Π³Ρ€ΡƒΠ±ΠΎΠΉ силы). Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΎΠΊΠ΅Π½ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния подписи.

Для прСдотвращСния этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π°Π΄ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ слоТный сСкрСтный ΠΊΠ»ΡŽΡ‡: Π±ΡƒΠΊΠ²Π΅Π½Π½ΠΎ-Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ (ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΉ рСгистр) + ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ»ΡŽΡ‡ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… вычислСний, Ρ€Π°Π·ΠΌΠ΅Ρ€ сСкрСтного ΠΊΠ»ΡŽΡ‡Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ 50 ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ.

Для ΠΎΡ†Π΅Π½ΠΊΠΈ слоТности сСкрСтного ΠΊΠ»ΡŽΡ‡Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ для вашСй подписи Ρ‚ΠΎΠΊΠ΅Π½Π°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π°Ρ‚Π°ΠΊΡƒ ΠΏΠΎ ΡΠ»ΠΎΠ²Π°Ρ€ΡŽ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ ΠΊ Ρ‚ΠΎΠΊΠ΅Π½Ρƒ Π² сочСтании с JWT API.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

JWT (JSON Web Token) автоматичСскоС ΠΏΡ€ΠΎΠ΄Π»Π΅Π½ΠΈΠ΅ срока дСйствия

Π― Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ Π½Π° основС JWT для нашСго Π½ΠΎΠ²ΠΎΠ³ΠΎ REST API. Но ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ срок дСйствия установлСн Π² Ρ‚ΠΎΠΊΠ΅Π½Π΅, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ Π΅Π³ΠΎ автоматичСски ΠΏΡ€ΠΎΠ΄Π»ΠΈΡ‚ΡŒ? Π― Π½Π΅ Ρ…ΠΎΡ‡Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ X ΠΌΠΈΠ½ΡƒΡ‚, Ссли ΠΎΠ½ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ использовали ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² этот ΠΏΠ΅Ρ€ΠΈΠΎΠ΄. Π­Ρ‚ΠΎ Π±Ρ‹Π» Π±Ρ‹ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ²Π°Π» UX.

Π½ΠΎ ΠΏΡ€ΠΎΠ΄Π»Π΅Π½ΠΈΠ΅ срока дСйствия создаСт Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΎΠΊΠ΅Π½ (ΠΈ старый ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ дСйствитСлСн Π΄ΠΎ истСчСния срока дСйствия). И созданиС Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΎΠΊΠ΅Π½Π° послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ запроса Π·Π²ΡƒΡ‡ΠΈΡ‚ Π³Π»ΡƒΠΏΠΎ для мСня. Π—Π²ΡƒΡ‡ΠΈΡ‚ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° бСзопасности, ΠΊΠΎΠ³Π΄Π° нСсколько Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, я ΠΌΠΎΠ³ Π±Ρ‹ Π°Π½Π½ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ старый ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ список, Π½ΠΎ ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹. И ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· прСимущСств JWT являСтся отсутствиС хранСния.

Π― нашСл, ΠΊΠ°ΠΊ Auth0 Ρ€Π΅ΡˆΠΈΠ» это. Они ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠΊΠ΅Π½ JWT, Π½ΠΎ ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ обновлСния: https://docs.auth0.com/refresh-token

Π½ΠΎ ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ это (Π±Π΅Π· Auth0), ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ обновлСния ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΠΉΡ‚Π΅ ΠΈΡ… срок годности. Π’ Ρ‡Π΅ΠΌ ΠΆΠ΅ Ρ‚ΠΎΠ³Π΄Π° Ρ€Π΅Π°Π»ΡŒΠ½Π°Ρ Π²Ρ‹Π³ΠΎΠ΄Π°? ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΎΠΊΠ΅Π½ (Π½Π΅ JWT) ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ срок дСйствия Π½Π° сСрвСрС?

Π΅ΡΡ‚ΡŒ Π»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹? ИспользованиС JWT Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для этого сцСнария?

9 ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ²

Π― Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ Π² Auth0, ΠΈ я участвовал Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚ΠΎΠΊΠ΅Π½Π° обновлСния.

всС зависит ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° прилоТСния ΠΈ Π²ΠΎΡ‚ наш Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄.

web-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ шаблоном являСтся ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠΊΠ΅Π½Π° Π΄ΠΎ Π΅Π³ΠΎ истСчСния.

установитС срок дСйствия ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° Π½Π° ΠΎΠ΄Π½Ρƒ нСдСлю ΠΈ обновляйтС ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ час. Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ Π½Π΅Π΄Π΅Π»ΠΈ, ΠΈΠΌ придСтся снова Π²ΠΎΠΉΡ‚ΠΈ Π² систСму, ΠΈ это ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΠ΅ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ UX.

Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½, Π²Π°ΡˆΠ΅ΠΌΡƒ API Π½ΡƒΠΆΠ½Π° новая конСчная Ρ‚ΠΎΡ‡ΠΊΠ°, которая ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ, Π½Π΅ ΠΈΡΡ‚Π΅ΠΊΡˆΠΈΠΉ JWT ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ подписанный JWT с Π½ΠΎΠ²Ρ‹ΠΌ ΠΏΠΎΠ»Π΅ΠΌ истСчСния срока дСйствия. Π—Π°Ρ‚Π΅ΠΌ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½ Π³Π΄Π΅-Ρ‚ΠΎ.

ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Π΅/прилоТСния

Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ€ΠΎΠ΄Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π²ΠΎΠΉΡ‚ΠΈ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·.

идСя Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠΊΠ΅Π½ обновлСния Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ истСкаСт, ΠΈ это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ всСгда обмСниваСтся Π½Π° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ JWT.

ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ истСкаСт, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π·Π½Π°Ρ‡ΠΈΡ‚ Π½ΠΈΠΊΠΎΠ³Π΄Π°. Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли Π²Ρ‹ потСряСтС свой Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½? Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ способ ΠΎΡ‚ΠΎΠ·Π²Π°Ρ‚ΡŒ доступ. ΠœΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ имя устройства, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ «iPad maryo». Π—Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΡ‚ΠΎΠ·Π²Π°Ρ‚ΡŒ доступ ΠΊ «iPad maryo».

Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄-ΠΎΡ‚ΠΎΠ·Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½ обновлСния Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ событиС. Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎΠ΅ событиС-смСна пароля.

ΠΌΡ‹ считаСм, Ρ‡Ρ‚ΠΎ JWT Π½Π΅ ΠΏΠΎΠ»Π΅Π·Π΅Π½ для этих случаСв использования, поэтому ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΡΠ»ΡƒΡ‡Π°ΠΉΠ½ΡƒΡŽ строку ΠΈ Ρ…Ρ€Π°Π½ΠΈΠΌ Π΅Π΅ Π½Π° нашСй сторонС.

Π² случаС, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ сами ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ auth (i.e Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°, Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Auth0), ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Ρ„Π»Π°Π³ «reauth» Π² бэкэндС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ установлСн, ΠΊΠΎΠ³Π΄Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ сбросил свой ΠΏΠ°Ρ€ΠΎΠ»ΡŒ. Π€Π»Π°Π³ удаляСтся ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π²Ρ…ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² систСму.

ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°, Π² соотвСтствии с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠΉΡ‚ΠΈ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 72 часа. Π’ этом случаС Π»ΠΎΠ³ΠΈΠΊΠ° обновлСния ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° API Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ Π΄Π°Ρ‚Ρƒ послСднСго Π²Ρ…ΠΎΠ΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚/Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° Π½Π° этой основС.

я возился ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ Π½Π°ΡˆΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² HTML5 с RESTful apis Π² бэкэндС. РСшСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ я ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π», Π±Ρ‹Π»ΠΎ:

As Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ частыС запросы Ρ‚ΠΎΠΊΠ΅Π½Π° обновлСния. Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ / ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎ запуска Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° обновлСния, срок дСйствия ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° истСкаСт, ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ придСтся ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π²ΠΎΠΉΡ‚ΠΈ Π² систСму.

Π±ΠΎΠ»Π΅Π΅ слоТная стратСгия ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° для удовлСтворСния бСздСйствия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€Π΅Π½Π΅Π±Ρ€Π΅Ρ‡ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΠΎΠΉ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°). Π’ этом случаС Π²Ρ‹Π·ΠΎΠ² ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° renew Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ врСмя истСчСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ врСмя сСанса. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ слСдитС Π·Π° послСдним ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ взаимодСйствиСм соотвСтствСнно.

МнС Π½Π΅ нравится идСя установки Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ срока дСйствия, поэтому этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с собствСнными прилоТСниями, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΌΠ΅Π½Π΅Π΅ частой Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ.

Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ для аннулирования JWTs Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ бСзопасного хранСния Π½Π° бэкэндС являСтся рСализация Π½ΠΎΠ²ΠΎΠ³ΠΎ jwt_version столбСц integer Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ users. Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Ρ…ΠΎΡ‡Π΅Ρ‚ Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· систСмы ΠΈΠ»ΠΈ ΠΈΡΡ‚Π΅Ρ‡ΡŒ срок дСйствия ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ², ΠΎΠ½ΠΈ просто ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚

ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹: ΠΊΠΎΠ³Π΄Π° ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с JWTs Π΄Π°Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΡƒΡŽ идСю для этого сцСнария. НСкоторыС ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹:-

посмотритС auth0 / angular-jwt Π² AngularJS

Π― фактичСски Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» это Π² PHP, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Guzzle, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ для api, Π½ΠΎ концСпция Π΄ΠΎΠ»ΠΆΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ.

Π² основном, я Π²Ρ‹ΠΏΡƒΡΠΊΠ°ΡŽ Π΄Π²Π° Ρ‚ΠΎΠΊΠ΅Π½Π°, ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ (5 ΠΌΠΈΠ½ΡƒΡ‚) ΠΈ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ истСкаСт Ρ‡Π΅Ρ€Π΅Π· нСдСлю. ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ПО для ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ обновлСния ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ³ΠΎ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π°, Ссли ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚ 401 Π½Π° ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ запрос. Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅Ρ‚ исходный запрос снова, ΠΈ Ссли ΠΎΠ½ смог ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚, ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Если это Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ, ΠΎΠ½ просто ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ 401 ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ.

Если ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ Ρ‚ΠΎΠΊΠ΅Π½ истСк, Π½ΠΎ всС Π΅Ρ‰Π΅ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½, Π° Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ Ρ‚ΠΎΠΊΠ΅Π½ дСйствитСлСн ΠΈ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½, ΠΎΠ½ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ Ρ‚ΠΎΠΊΠ΅Π½, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ Π² слуТбС, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ Ρ‚ΠΎΠΊΠ΅Π½ (это СдинствСнноС, для Ρ‡Π΅Π³ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован). Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ Ρ‚ΠΎΠΊΠ΅Π½ для получСния Π½ΠΎΠ²ΠΎΠ³ΠΎ Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ Ρ‚ΠΎΠΊΠ΅Π½Π°, Ρ‚Π΅ΠΌ самым продлСвая Π΅Π³ΠΎ Π΅Ρ‰Π΅ Π½Π° нСдСлю ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ обновляСт ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ Π·Π½Π°ΠΊ.

этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ‚Π°ΠΊΠΆΠ΅ позволяСт Π½Π°ΠΌ ΠΎΡ‚ΠΎΠ·Π²Π°Ρ‚ΡŒ доступ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 5 ΠΌΠΈΠ½ΡƒΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ для нашСго использования Π±Π΅Π· нСобходимости Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ список Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ².

Late edit: пСрСчитывая этот мСсяц послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ Π±Ρ‹Π» свСТ Π² ΠΌΠΎΠ΅ΠΉ Π³ΠΎΠ»ΠΎΠ²Π΅, я Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ доступ ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ³ΠΎ Ρ‚ΠΎΠΊΠ΅Π½Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ для Π±ΠΎΠ»Π΅Π΅ Π΄ΠΎΡ€ΠΎΠ³ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹Π·ΠΎΠ² Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Π±Ρ‹Π» Π»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½), Π½Π΅ платя Π·Π° Π½Π΅Π³ΠΎ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΊ вашим услугам.

jwt-autorefresh

эта Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² JWT Π·Π° вычислСнноС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ количСство сСкунд Π΄ΠΎ истСчСния срока дСйствия ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° доступа (Π½Π° основС утвСрТдСния exp, Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π² ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π΅). Он ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ±ΡˆΠΈΡ€Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ тСстов ΠΈ провСряСт довольно ΠΌΠ½ΠΎΠ³ΠΎ условий, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ любая странная Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сопровоТдаСтся ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ сообщСниСм ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… конфигурациях ΠΎΡ‚ вашСго ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰Π°Ρ срСда.

ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

ΠΎΡ‚ΠΊΠ°Π· ΠΎΡ‚ отвСтствСнности: я Ρ…Ρ€Π°Π½ΠΈΡ‚Π΅Π»ΡŒ

Как насчСт Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°:

Π½Π°ΠΌ Π½Π΅ трСбуСтся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ конСчная Ρ‚ΠΎΡ‡ΠΊΠ° для обновлСния Ρ‚ΠΎΠΊΠ΅Π½Π° Π² этом случаС. Π‘Ρ‹Π» Π±Ρ‹ ΠΏΡ€ΠΈΠ·Π½Π°Ρ‚Π΅Π»Π΅Π½ Π·Π° любой feedack.

я Ρ€Π΅ΡˆΠΈΠ» эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π² Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΎΠΊΠ΅Π½Π°:

Ссли Ρ‚ΠΎΠΊΠ΅Π½ всС Π΅Ρ‰Π΅ дСйствитСлСн Π½Π° основС expiredIn Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π½ΠΎ ΠΎΠ½ΠΎ ΡƒΠΆΠ΅ прСвысило softexp Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, сСрвСр ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ с ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ статусом для этой ошибки, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€. EXPIRED_TOKEN :

Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Ссли ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» EXPIRED_TOKEN response, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ автоматичСски ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½, отправляя запрос Π½Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° сСрвСр. Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΈ автоматичСски заботится ΠΎ клиСнтском ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

ΠΌΠ΅Ρ‚ΠΎΠ΄ обновлСния Π½Π° сСрвСрС Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, дСйствитСлСн Π»ΠΈ Ρ‚ΠΎΠΊΠ΅Π½:

сСрвСр откаТСтся ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹, Ссли Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *