Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π’ΠΎΠΊΠ΅Π½ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ JSON WEB Token

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

НачнСм с Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ ΡƒΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²Π° понятия: Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ. ИмСнно с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этих Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² ΠΏΠΎΡ‡Ρ‚ΠΈ всС ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрныС прилоТСния ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€Π°Π² доступа Π² своих сСрвисах.

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ нСбольшоС Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅

ΠŸΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΠΌ Π½Π°ΠΊΠΎΠ½Π΅Ρ† ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ самого Ρ‚ΠΎΠΊΠ΅Π½Π°. Как я сказал Ρ€Π°Π½Π΅Π΅ Π² качСствС Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ JSON Web Tokens (JWT) ΠΈ хотя Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±Ρ‹Π²Π°ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅, Π½ΠΎ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ JWT ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΠ»ΠΈΡΡŒ Π² Π½Π΅ΠΊΠΈΠΉ стандарт, ΠΈΠΌΠ΅Π½Π½ΠΎ поэтому Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

JSON Web Token (JWT) β€” это ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ стандарт (RFC 7519) для создания Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² доступа, основанный Π½Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON.

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

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Рассмотрим ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JWT. ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅ Ссли Π½Π΅ Π΄Π΅Π»Π°Π» этого Ρ€Π°Π½Π΅Π΅ ΠΈ Π² этом Π΅ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Π²ΠΎΠ΄ΠΈΡ‚ свой Π»ΠΎΠ³ΠΈΠ½ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ. Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ выдаст Π΅ΠΌΡƒ 2 Ρ‚ΠΎΠΊΠ΅Π½Π°: access token ΠΈ refresh token (для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ обсудим Π½ΠΈΠΆΠ΅, сСйчас Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ± access token). ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Ρ‚Π΅ΠΌ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹ΠΌ способом сохраняСт Π΅Π³ΠΎ сСбС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² локальном Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΈΠ»ΠΈ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ сСссий. Π—Π°Ρ‚Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄Π΅Π»Π°Π΅Ρ‚ запрос ΠΊ API прилоТСния ΠΎΠ½ добавляСт ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π½Π΅Π΅ access token. И Π½Π°ΠΊΠΎΠ½Π΅Ρ† нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² Π΄Π°Π½Π½Ρ‹ΠΉ запрос с Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠΌ, провСряСт Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΎΠΊΠ΅Π½ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ (ΠΎΠ± этой ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅, ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅, Π½ΠΈΠΆΠ΅), Π²Ρ‹Ρ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΎ Π½Π° Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ рСсурсы. Π’Π°ΠΊΠΈΠΌ Π½Π΅Ρ…ΠΈΡ‚Ρ€Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ происходит основная Π»ΠΎΠ³ΠΈΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с JSON Web Tokens.

Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈhttps://habr.com/ru/post/336082/

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Ρ‚ΠΎΠΊΠ΅Π½Π°

ΠŸΡ€ΠΈΡˆΠ»ΠΎ врСмя ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ структуру Ρ‚ΠΎΠΊΠ΅Π½Π° ΠΈ Ρ‚Π΅ΠΌ самым Π»ΡƒΡ‡ΡˆΠ΅ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ Ρ‡Ρ‚ΠΎ слСдуСт ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ JWT Ρ‚ΠΎΠΊΠ΅Π½ состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… частСй, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· Ρ‚ΠΎΡ‡ΠΊΡƒ:

ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ (playload)

Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈfunnytorimage.pw

Рассмотрим ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅.

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ

Π­Ρ‚ΠΎ пСрвая Ρ‡Π°ΡΡ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½Π°. Она слуТит ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго для хранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ‚ΠΎΠΊΠ΅Π½Π΅, которая Π΄ΠΎΠ»ΠΆΠ½Π° Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π½Π°ΠΌ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ дальнСйшиС Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ JWT. Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ прСдставлСн Π² Π²ΠΈΠ΄Π΅ JSON ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π² Base64-URL НапримСр:

Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Если Ρ€Π°ΡΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½ΡƒΡŽ строку ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ:

ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅

Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π§Ρ‚ΠΎ Π² JSON Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ прСдставляСт собой:

ИмСнно здСсь хранится вся полСзная информация. Для Π΄Π°Π½Π½ΠΎΠΉ части Π½Π΅Ρ‚ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ, ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто встрСчаСмых ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

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

Подпись

ВрСмя ΠΆΠΈΠ·Π½ΠΈ Ρ‚ΠΎΠΊΠ΅Π½Π° ΠΈ Refresh Token

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ я постарался ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠΌ доступа, Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ JSON Web Token (JWT). Π•Ρ‰Π΅ Ρ€Π°Π· хочСтся ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ с ΠΊΠ°ΠΊΠΎΠΉ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒΡŽ, Π½ΠΎ Π² Ρ‚ΠΎΠΆΠ΅ врСмя Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ, Ρ‚ΠΎΠΊΠ΅Π½ позволяСт Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΈ сдСлало Π΅Π³ΠΎ Ρ‚Π°ΠΊΠΈΠΌ популярным. Бпасибо Π·Π° ΡƒΠ΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ врСмя.

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

c ++ 11 β€” Π§Ρ‚ΠΎ Π΄Π΅Π»Π°ΡŽΡ‚ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΈΡ… Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° C ++?

Π― Ρ‡ΠΈΡ‚Π°ΡŽ ΠΊΠ½ΠΈΠ³Ρƒ (ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° программирования Π‘ΡŒΡΡ€Π½Π° Бтрауструпа).

Π’ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ Π²Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹:

Β«Π’ΠΎΠΊΠ΅Π½ β€” это ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ считаСм Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ число ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€. ИмСнно Ρ‚Π°ΠΊ компилятор C ++ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ со своим источником. На самом Π΄Π΅Π»Π΅, «токСнизация» Π² Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ β€” это Ρ‚ΠΎ, с Ρ‡Π΅Π³ΠΎ начинаСтся Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° тСкста Β».

Π― понимаю, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ, Π½ΠΎ ΠΎΠ½ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ это Π² дСталях, ΠΈ это мСня смущаСт.

РСшСниС

Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ, Π‘ΡŒΡΡ€Π°Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π² Π²ΠΈΠ΄Ρƒ лСксичСский Π°Π½Π°Π»ΠΈΠ·.

Π’ ΠΎΠ±Ρ‰ΠΈΡ… Ρ‡Π΅Ρ€Ρ‚Π°Ρ… токСнизация || созданиС Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² β€” это процСсс ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ дСлСния ΠΈΡ… Π½Π° Π±Π»ΠΎΠΊΠΈ, Π½Π΅ бСспокоясь ΠΎ ΠΏΡ€ΠΎΠ±Π΅Π»Π°Ρ… ΠΈ Ρ‚. Π΄., Π»ΡƒΡ‡ΡˆΠ΅ всСго описанных Ρ€Π°Π½Π΅Π΅ @StoryTeller.
Β«ΠΈΠ»ΠΈ, ΠΊΠ°ΠΊ сказал Π‘ΡŒΡΡ€Π°Π½: это ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ считаСм Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ΠΉΒ».

Π‘Π°ΠΌ Ρ‚ΠΎΠΊΠ΅Π½ являСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° C ++ β€˜UDT’, Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ int ΠΈΠ»ΠΈ char, поэтому Ρ‚ΠΎΠΊΠ΅Π½ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для опрСдСлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ хранСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

UDT ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‡Π»Π΅Π½Ρ‹-Π΄Π°Π½Π½Ρ‹Π΅. Π’ вашСм ΠΊΠΎΠ΄Π΅ Π²Ρ‹ опрСдСляСтС Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‡Π΅Π½ΡŒ просты.

1) Π”ΠΎΠ±Ρ€Ρ‹ΠΉ, 2) Π¦Π΅Π½Π½ΠΎΡΡ‚ΡŒ

На Π΅Π³ΠΎ основС ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ token_kind_one с Π΅Π³ΠΎ Π²ΠΈΠ΄ΠΎΠΌ (ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€) β€˜+’.

ΠΈ token_kind_two с Π΅Π³ΠΎ Π²ΠΈΠ΄ΠΎΠΌ (Ρ†Π΅Π»ΠΎΠ΅ число / число) β€˜8’ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 3,14.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· дСсяти символов 1 + 2 * 3 (5/4), Ρ‡Ρ‚ΠΎ соотвСтствуСт дСсяти Ρ‚ΠΎΠΊΠ΅Π½Π°ΠΌ.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ C ++ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Π° Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ², пропуская всС ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹. Π§Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ понятно для сСбя.

Π”Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

ВокСнизация Π²Π°ΠΆΠ½Π° для процСсса выяснСния Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. Π’ΠΎ, Π½Π° Ρ‡Ρ‚ΠΎ ссылаСтся Π‘ΡŒΡΡ€Π½Π΅ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ источника C ++, касаСтся Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π½Π° смысл ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π²Π»ΠΈΡΡŽΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π° Ρ‚ΠΎΠΊΠ΅Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’ частности, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹. Π’ частности, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΎΠΊΠ΅Π½, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ появляСтся рядом с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ символами, ΠΈ ΠΊΠ°ΠΊ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹, Ссли Π΅ΡΡ‚ΡŒ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ.

Π‘ + Ρ‚ΠΎΠ»ΡŒΠΊΠΎ, Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΠΎΠ΅ собираСтся просто ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΉ + Π½Π° i Π΄Π²Π°ΠΆΠ΄Ρ‹? Или это Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·? Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ, СстСствСнно. Нам Π½ΡƒΠΆΠ΅Π½ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΎΠΊΠ΅Π½, ΠΈ поэтому ввСсти ++ ΠΊΠ°ΠΊ Π΅Π³ΠΎ собствСнноС «слово» Π² языкС.

Но Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΅ΡΡ‚ΡŒ другая (хотя ΠΈ мСньшая) ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли программист Ρ…ΠΎΡ‡Π΅Ρ‚ просто ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ + Π² Π΄Π²Π° Ρ€Π°Π·Π°, Π° Π½Π΅ прирост? НуТны ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ². ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π΅Π» всСгда являСтся Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ для Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ², наш программист ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ:

Π“Ρ€ΡƒΠ±ΠΎ говоря, рСализация C ++ начинаСтся с Ρ„Π°ΠΉΠ»Π°, ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ символов, сначала ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΈΡ… Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² («слов» со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π² языкС C ++), Π° Π·Π°Ρ‚Π΅ΠΌ провСряСт, ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ Π² Β«ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈΒ», ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ допустимоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. имСя Π² Π²ΠΈΠ΄Ρƒ.

Он ссылаСтся Π½Π° лСксичСский Π°Π½Π°Π»ΠΈΠ· β€” нСобходимая Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ компилятора. Π­Ρ‚ΠΎ инструмСнт для компилятора для осмыслСнной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ тСкста (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±Π°ΠΉΡ‚ΠΎΠ²). НапримСр, рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ строку Π² C ++

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

Π­Ρ‚ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π²Ρ‹ΡˆΠ΅ (ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² ΠΌΠΎΠ΅ΠΌ случаС ΠΎΠ±Π° kind Π° Ρ‚Π°ΠΊΠΆΠ΅ value это строки), это просто ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. Π’Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ это Ρ‡Π΅Ρ€Π΅Π· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ рСгулярныС выраТСния.

Π’ любом случаС Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ Π»Π΅Π³Ρ‡Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ для ΠΌΠ°ΡˆΠΈΠ½Ρ‹, Ρ‡Π΅ΠΌ простой тСкст. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом для компилятора являСтся созданиС Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ абстрактноС синтаксичСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ Π½Π° основС Ρ‚ΠΎΠΊΠ΅Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ смысл всСму.

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

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

Π—Π°Ρ‚Π΅ΠΌ это Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠΌ, ΠΈ большая Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° Π² исходном Ρ„Π°ΠΉΠ»Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π±ΠΈΡ‚Π° Π½Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ структуры.

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

Π’ΠΎΠΊΠ΅Π½ Π² BPMN. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ + Π²ΠΈΠ΄Π΅ΠΎ

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

ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ Ρ‚ΠΎΠΊΠ΅Π½Π° Π² BPMN Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ вопросов, хотя Π½Π° самом Π΄Π΅Π»Π΅, эта ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ ΠΊΡ€Π°ΠΉΠ½Π΅ проста ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Π°. Для Π½Π°Ρ‡Π°Π»Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ классичСскоС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅:

Π’ΠΎΠΊΠ΅Π½ – это тСорСтичСский ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для понимания повСдСния рассматриваСмого процСсса. ПовСдСниС элСмСнтов процСсса ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ понято Ρ‡Π΅Ρ€Π΅Π· Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пСрСмСщаСтся ΠΏΠΎ структурС процСсса. ΠœΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅ΠΌ Π² систСмах исполнСния ΠΈ модСлирования, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… BPMN стандарт, Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ Π²ΠΈΠ΄Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Ρ‚ΠΎΠΊΠ΅Π½Π°.

ΠŸΡ€ΠΎΡ‰Π΅ говоря, Ρ‚ΠΎΠΊΠ΅Π½ – это ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Π²Π΅Π»ΠΈ для контроля Ρ€Π°Π±ΠΎΡ‚Ρ‹ бизнСс-процСсса, Π΅Π³ΠΎ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈ тСстирования. Π’Π°ΠΊ, Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ для ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ сущСствуСт пошаговоС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° (Ρ€Π΅ΠΆΠΈΠΌ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ). ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ этапС находится Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ, ΠΏΡ€ΠΈ ΠΊΠ°ΠΊΠΈΡ… условиях Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Ρ‚Π° ΠΈΠ»ΠΈ иная Π²Π΅Ρ‚ΠΊΠ°.

Π’ BPMN для Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ Π±Ρ‹Π» Π²Π²Π΅Π΄Π΅Π½ Ρ‚ΠΎΠΊΠ΅Π½. Π’.Π΅. ΠΏΠΎ сути, это ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠ°, которая ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Π°ΠΌ, ΠΊΠ°ΠΊΠΎΠΉ Π±Π»ΠΎΠΊ процСсса выполняСтся Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ Ρ‚ΠΎΠΊΠ΅Π½ ΠΏΠΎ процСссу, Π²Ρ‹ смоТСтС Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠΌ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ самого бизнСс-процСсса. Π‘Π΅Π· Π½Π΅Π³ΠΎ само понятиС Ρ‚ΠΎΠΊΠ΅Π½Π° тСряСт смысл. Π”Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΊΠ΅Π½, ΠΈ ΠΊΠ°ΠΊ с Π½ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β„– 1

Рассмотрим процСсс Π·Π°ΠΊΡƒΠΏΠΊΠΈ Ρ‚ΠΎΠ²Π°Ρ€Π° (см. рисунок Π½ΠΈΠΆΠ΅). Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΎΠ½ довольно простой, ΠΏΠΎΡ‚ΠΎΠΌΡƒ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ сам процСсс ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ, Π° сосрСдоточимся Π½Π° Ρ‚ΠΎΠΊΠ΅Π½Π΅.

Π’ самом Π½Π°Ρ‡Π°Π»Π΅ исполнСния процСсса Ρ‚ΠΎΠΊΠ΅Π½ находится Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ Π²Ρ…ΠΎΠ΄Π°. Π”Π°Π»Π΅Π΅ ΠΌΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ. Π”Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠΊΠ΅Π½ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, пСрСходя с этапа Π½Π° этап процСсса.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‚ΠΎΠΊΠ΅Π½ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π° этап Β«Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Заявка Π½Π° Π·Π°ΠΊΡƒΠΏΠΊΡƒ Ρ‚ΠΎΠ²Π°Ρ€Π°Β». ПослС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ этапа Ρ‚ΠΎΠΊΠ΅Π½ двиТСтся Π½Π° этап Β«ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ заявку Π½Π° согласованиС» ΠΈ Ρ‚.Π΄.

Если Π±Ρ‹ Ρƒ нас Π½Π΅ Π±Ρ‹Π»ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ элСмСнта, ΠΊΠ°ΠΊ Ρ‚ΠΎΠΊΠ΅Π½, ΠΌΡ‹ Π±Ρ‹ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π³Π΄Π΅ сСйчас находится процСсс.

Π›ΡŽΠ±ΠΎΠΉ процСсс запускаСтся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. Он Π½Π΅ выполняСтся вСсь ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡Π°, шлюз ΠΈΠ»ΠΈ событиС. Но Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅ всС процСссы Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ, Π½Π΅ всС ΡˆΠ»ΡŽΠ·Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ, Π½Π΅ всС Π·Π°Π΄Π°Ρ‡ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ.

Π’ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΡ‚ элСмСнт, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ находится Ρ‚ΠΎΠΊΠ΅Π½. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΠΏΠΎ Π»ΠΎΠ³ΠΈΠΊΠ΅ протСкания процСсса.

Π’ нашСм случаС послС шлюза «Заявка ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π°?Β» ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΎΡ‚Π²Π΅Ρ‚ Β«Π”Π°Β». И Ρ‚ΠΎΠΊΠ΅Π½ двиТСтся ΠΏΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠ΅. Π€ΠΈΠ½Π°Π» Ρ€Π°Π±ΠΎΡ‚Ρ‹ – Ρ‚ΠΎΡ‡ΠΊΠ° Π²Ρ‹Ρ…ΠΎΠ΄Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β„– 2

Для Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ понимания рассмотрим Ρ‚ΠΎΡ‚ ΠΆΠ΅ процСсс. Но Π² этот Ρ€Π°Π· послС шлюза ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ «НСт».

Π’ этом случаС Ρ‚ΠΎΠΊΠ΅Π½ двиТСтся ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ ΠΈΠ»ΠΈ, ΠΈΠ½Π°Ρ‡Π΅ говоря, ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ нашСго процСсса.

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠΊΠ΅Π½ Β«Π½Π΅ Π·Π½Π°Π΅Ρ‚Β» ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ. ΠŸΡ€ΠΎΡ†Π΅ΡΡ, Ρ‚.Π΅. Ρ‚ΠΎΠΊΠ΅Π½ послС шлюза пошСл ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ° Β«Π½Π΅Ρ‚Β». БоотвСтствСнно, всС, Ρ‡Ρ‚ΠΎ касаСтся Π²Π΅Ρ‚ΠΊΠΈ Β«Π΄Π°Β», Π² этом случаС Π½Π΅ интСрСсно Π½ΠΈ Π½Π°ΠΌ, Π½ΠΈ процСссу, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‚Π΅ Π²Π΅Ρ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ задСйствованы здСсь ΠΈ сСйчас, для процСсса Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β„– 3

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с бизнСс-процСссом Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли выполняСтся Π΄Π²Π΅ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π²Π΅Ρ‚ΠΊΠΈ процСсса ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ бизнСс-процСсса «БогласованиС Π·Π°ΠΊΡƒΠΏΠΊΠΈΒ».

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π° самом процСссС. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ элСмСнты понятны ΠΈΠ· графичСской ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π° подробности Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° этап Β«ΠžΠ΄ΠΎΠ±Ρ€ΠΈΡ‚ΡŒ заявку». ПослС Π½Π΅Π³ΠΎ Π½Π° схСмС находится ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ шлюз. Π­Ρ‚ΠΎΡ‚ элСмСнт Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π΄Π²Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ это изобраТаСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ². На Ρ‚ΠΎΡ‡ΠΊΠ΅ Π²Ρ…ΠΎΠ΄Π° ΠΈ Π΄ΠΎ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ шлюза Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ пСрСмСщаСтся ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΎΠΊΠ΅Π½. Π”Π°Π»Π΅Π΅ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΄Π²Π° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… процСсса. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΎΠΊΠ΅Π½ раздСляСтся Π½Π° Π΄Π²Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

ПодвСдСм ΠΈΡ‚ΠΎΠ³ΠΈ

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

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

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ JWT Ρ‚ΠΎΠΊΠ΅Π½?

Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ посвящСна Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠΌΡƒ Ρ€Π°Π·Π±ΠΎΡ€Ρƒ JWT ΠΈ Π΅Π³ΠΎ возмоТностСй. ΠœΡ‹ ΠΈΠ·ΡƒΡ‡ΠΈΠΌ структуру Ρ‚ΠΎΠΊΠ΅Π½Π° ΠΈ построим Π΅Π³ΠΎ с нуля. Π—Π°Ρ‚Π΅ΠΌ рассмотрим Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнныС способы использования.

Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π’ΠΎ врСмя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сСрвиса с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ являСтся рСализация Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Когда Ρƒ вас ΠΎΠ΄ΠΈΠ½ сСрвис, всС довольно просто:

Π­Ρ‚Π° строка ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ хранится Π² ΠΊΡƒΠΊΠ°Ρ… Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°, Π° ΠΏΠΎΡ‚ΠΎΠΌΡƒ называСтся Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΊΡƒΠΊΠΎΠΉ.

ВсС Π±Ρ‹Π»ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΈ микросСрвисы. Допустим Ρƒ нас Π΅ΡΡ‚ΡŒ сСрвСр Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ находится Π½Π° Π΄ΠΎΠΌΠ΅Π½Π΅ auth.foo.com, ΠΈ ΠΏΠ°Ρ€ΠΎΡ‡ΠΊΠ° Π΄Ρ€ΡƒΠ³ΠΈΡ… сСрвисов. Один ΠΈΠ· Π²Π°ΡˆΠΈΡ… сСрвисов находится Π½Π° Π΄ΠΎΠΌΠ΅Π½Π΅ blog.foo.com.

Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ авторизуСтся Π½Π° сСрвСрС Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‚ΠΎ ΠΊΡƒΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ записана для Π΄ΠΎΠΌΠ΅Π½Π° auth.foo.com. БСрвис blog.foo.com ΡƒΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ доступ ΠΊ этой ΠΊΡƒΠΊΠ΅.

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ, Ссли Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΡƒΠΊΡƒ Π² LocalStorage Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°. Π’ΠΎΠ³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ другая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Π£ сСрвиса blog.foo.com Π½Π΅Ρ‚ возмоТности ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊΡƒΠΊΡƒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π΅Π΅ Π½Π΅ Π²Ρ‹Π΄Π°Π²Π°Π». БСрвису Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ запрос Π½Π° сСрвСр Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ сущСствованиС ΠΊΡƒΠΊΠΈ ΠΈ ΠΊΠΎΠΌΡƒ ΠΎΠ½Π° ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚. Π­Ρ‚ΠΎ создаСт Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° сСрвСр Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ.

РСшСниСм всСх этих ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ являСтся JWT Ρ‚ΠΎΠΊΠ΅Π½ (JSON Web Token), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π»Π°Π³Π°Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΏΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° сами микросСрвисы, Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ошибок Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ прилоТСния.

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

Π€ΠΎΡ€ΠΌΠ°Ρ‚ JWT

JWT состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… основных частСй: Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° (header), Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ (payload) ΠΈ подписи (signature). Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON, ΠΊΠΎΠ΄ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² base64, Π° Π·Π°Ρ‚Π΅ΠΌ Π½Π° ΠΈΡ… основС вычисляСтся подпись. Π—Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ части ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ, ΠΈ Π½Π° ΠΈΡ… основС вычисляСтся подпись, которая Ρ‚Π°ΠΊΠΆΠ΅ становится Ρ‡Π°ΡΡ‚ΡŒΡŽ Ρ‚ΠΎΠΊΠ΅Π½Π°.

Π‘Ρ‹Π²Π°ΡŽΡ‚ ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΠ³Π΄Π° Π² JWT отсутствуСт подпись. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ случай Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСн Π΄Π°Π»Π΅Π΅.

Header

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ являСтся слуТСбной Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΈ состоит ΠΈΠ· Π΄Π²ΡƒΡ… ΠΏΠΎΠ»Π΅ΠΉ: Ρ‚ΠΈΠΏΠ° Ρ‚ΠΎΠΊΠ΅Π½Π°, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС JWT, ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ подписи:

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля typ Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ игнорируСтся прилоТСниями, ΠΎΠ΄Π½Π°ΠΊΠΎ стандарт Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Π½Π΅Π³ΠΎ для обСспСчСния ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости.

ПолС alg ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ для заполнСния. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ случаС Π±Ρ‹Π» ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ HS256 (HMAC-SHA256), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ подписи ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ сСкрСтный ΠΊΠ»ΡŽΡ‡.

Для подписи JWT ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ асиммСтричного ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ RS256 (RSA-SHA256). Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ допускаСт использованиС ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°Ρ HS512, RS512, ES256, ES512, none ΠΈ Π΄Ρ€.

ИспользованиС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° none ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠΊΠ΅Π½ Π½Π΅ Π±Ρ‹Π» подписан. Π’ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΌ Ρ‚ΠΎΠΊΠ΅Π½Π΅ отсутствуСт Ρ‡Π°ΡΡ‚ΡŒ с подписью, ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎΠ΄Π»ΠΈΠ½Π½ΠΎΡΡ‚ΡŒ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

Π—Π°ΠΊΠΎΠ΄ΠΈΡ€ΡƒΠ΅ΠΌ этот JSON Π² base64 ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

Payload

ПолСзна Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° β€” это Π»ΡŽΠ±Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² Ρ‚ΠΎΠΊΠ΅Π½Π΅. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ прСдусматриваСт нСсколько Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ:

ВсС эти claims Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ, Π½ΠΎ ΠΈΡ… использованиС Π½Π΅ ΠΏΠΎ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ коллизиям.

Π›ΡŽΠ±Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎ договорСнности ΠΌΠ΅ΠΆΠ΄Ρƒ сторонами, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΌΠΈ Ρ‚ΠΎΠΊΠ΅Π½. НапримСр, payload ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

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

Payload Π½Π΅ ΡˆΠΈΡ„Ρ€ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ использовании Ρ‚ΠΎΠΊΠ΅Π½Π°, поэтому Π½Π΅ стоит ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² Π½Π΅ΠΌ Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. НапримСр, паспортныС Π΄Π°Π½Π½Ρ‹Π΅.

Π Π°Π·ΠΌΠ΅Ρ€ payload Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½, Π½ΠΎ Π½Π΅ стоит ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² Π½Π΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π°Π½Π½Ρ‹Ρ…. Из-Π·Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ‚ΠΎΠΊΠ΅Π½Π° ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ‡Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ.

Π£ нас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ 2/3 Ρ‚ΠΎΠΊΠ΅Π½Π°, ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ подпись.

Signature

Подпись гСнСрируСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: Π—Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈ полСзная Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ с Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ («.») Π² качСствС раздСлитСля. Π—Π°Ρ‚Π΅ΠΌ эта строка Ρ…Π΅ΡˆΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π² header Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π΅ΡΡ‚ΡŒ подпись.

Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ‚ΠΎΠΊΠ΅Π½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJBdXRoIFNlcnZlciIsInN1YiI6ImF1dGgiLCJleHAiOjE1MDU0Njc3NTY4NjksImlhdCI6MTUwNTQ2NzE1MjA2OSwidXNlciI6MX0.9VPGwNXYfXnNFWH3VsKwhFJ0MazwmNvjSSRZ1vf3ZUU

Π”Ρ€ΡƒΠ³ΠΈΠ΅ сСрвисы Π·Π½Π°ΡŽΡ‚ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ сСрвис подписываСт Ρ‚ΠΎΠΊΠ΅Π½Ρ‹. Или Ρƒ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ подпись. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ссли ΠΊΡ‚ΠΎ-Ρ‚ΠΎ попытаСтся ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ‚ΠΎΠΊΠ΅Π½Π΅, Ρ‚ΠΎ ΠΎΠ½ станСт Π½Π΅ Π²Π°Π»ΠΈΠ΄Π½Ρ‹ΠΌ. НапримСр, Ссли Π²Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚Π΅ Π² Ρ‚ΠΎΠΊΠ΅Π½Π΅ Ρ€ΠΎΠ»ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π° Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅Ρ‚ ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΡƒΠ΄Π° β€œadmin”, Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ смоТСт ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ подпись для поддСльного Ρ‚ΠΎΠΊΠ΅Π½Π°.

ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ сайт jwt.io ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π΄Π²Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ: HS256 ΠΈ RS256. Но ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ с ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ.

ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ сайт jwt.io ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π΄Π²Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ: HS256 ΠΈ RS256. Но ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ с ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ.

АутСнтификация

Π‘Ρ…Π΅ΠΌΠ° Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ с использованиСм JWT ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½ΠΎ проста.

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ свои ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ Π΄ΠΎΠ²Π΅Ρ€Π΅Π½Π½ΠΎΠΌ сСрвисС Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ сСрвис прСдоставляСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Ρ‚ΠΎΠΊΠ΅Π½, содСрТащий свСдСния ΠΎΠ± этом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅.

ΠŸΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… обращСниях Ρ‚ΠΎΠΊΠ΅Π½ пСрСдаСтся ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π² запросах ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ: Π² cookie, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Ρ… запроса, POST ΠΈΠ»ΠΈ GET ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… ΠΈ Ρ‚. Π΄.

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ² Ρ‚ΠΎΠΊΠ΅Π½, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ спСрва провСряСт Π΅Π³ΠΎ подпись. УбСдившись, Ρ‡Ρ‚ΠΎ подпись Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Π°, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΠΈΠ· части ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ свСдСния ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ ΠΈ Π½Π° ΠΈΡ… основС Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ.

МоТно Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ всю эту схСму Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π½Π° jwt.io.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° JWT

ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΠΌ прСимущСства использования JWT Π² сравнСнии с классичСской схСмой Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΉ сСссии.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ с использованиСм Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² позволяСт Π½Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ±ΠΎ всСх Π²Ρ‹Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΎΠΊΠ΅Π½Π°Ρ…, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ классичСской схСмС. Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ обращаСтся ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ, ΠΎΠ½ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΅ΠΌΡƒ свой Ρ‚ΠΎΠΊΠ΅Π½. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ остаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ подпись ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ поля ΠΈΠ· ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.

Π’-Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, ΠΏΡ€ΠΈ использовании ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ сСрвиса Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ становится Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΄ΠΈΠ½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ Π²Ρ…ΠΎΠ΄Π° Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ сСрвисы с ΠΎΠ΄Π½ΠΈΠΌΠΈ ΠΈ Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ ΡƒΡ‡Π΅Ρ‚Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ (SSO). Π•Π΄ΠΈΠ½ΠΎΠΆΠ΄Ρ‹ пройдя ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ смоТСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ со своим Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠΌ ΠΊ Ρ‚Π΅ΠΌ рСсурсам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ этому сСрвису Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ.

Π’-Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹Ρ…, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Ρ€Π°Π½Π΅Π΅, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² части ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ практичСски Π»ΡŽΠ±Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ прилоТСния ΠΌΠΎΠΆΠ΅Ρ‚ сущСствСнно ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

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

Уязвимости JWT

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны основныС Π°Ρ‚Π°ΠΊΠΈ Π½Π° JWT ΠΈ Π΄Π°Π½Ρ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΈΡ… ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΡŽ.

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

ΠŸΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Ρ‚ΠΎΠΊΠ΅Π½Π° ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ряду нСприятных послСдствий.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ JWT пСрСдаСтся Π² ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅, для получСния хранящихся Π² части ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ исходных Π΄Π°Π½Π½Ρ‹Ρ… достаточно ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊ этой части Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ base64UrlDecode. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ, ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΈΠ²ΡˆΠΈΠΉ Ρ‚ΠΎΠΊΠ΅Π½, смоТСт ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ хранящиСся Π² Ρ‚ΠΎΠΊΠ΅Π½Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅.

Π’ соотвСтствии с Π»ΡƒΡ‡ΡˆΠΈΠΌΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°ΠΌΠΈ для прСдотвращСния ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ΡƒΠ³Ρ€ΠΎΠ·Ρ‹ рСкомСндуСтся:

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ, ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΈΠ²ΡˆΠΈΠΉ Ρ‚ΠΎΠΊΠ΅Π½, смоТСт Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΎΡ‚ Π»ΠΈΡ†Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Ρ‡Π΅ΠΉ JWT Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‡Π΅Π½.

Π—Π΄Π΅ΡΡŒ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

Refresh tokens

Π’ соврСмСнных схСмах Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, основанных Π½Π° JWT, послС прохоТдСния Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π΄Π²Π° Ρ‚ΠΎΠΊΠ΅Π½Π°:

Access token ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ сильно ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ врСмя ΠΆΠΈΠ·Π½ΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠ΄Π½Ρƒ ΠΌΠΈΠ½ΡƒΡ‚Ρƒ). Refresh token ΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя ΠΆΠΈΠ·Π½ΠΈ (дСнь, нСдСля, мСсяц), Π½ΠΎ ΠΎΠ½ ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΈ слуТит ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для обновлСния access token ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Π‘Ρ…Π΅ΠΌΠ° Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠŸΠΎΠ΄Π±ΠΎΡ€ ΠΊΠ»ΡŽΡ‡Π° симмСтричного Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° подписи

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

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

Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠΉ части ΡΡ‚Π°Ρ‚ΡŒΠΈ для подписи JWT Π² качСствС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ Ρ„Ρ€Π°Π·Ρ‹ Π±Ρ‹Π»Π° использована строка password. Она простая, короткая ΠΈ содСрТится Π²ΠΎ всСх основных словарях для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ. Π—Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΡƒ Π½Π΅ составит Ρ‚Ρ€ΡƒΠ΄Π° ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ эту ΠΊΠ»ΡŽΡ‡Π΅Π²ΡƒΡŽ Ρ„Ρ€Π°Π·Ρƒ с использованиСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ John the Ripper ΠΈΠ»ΠΈ hashcat.

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ Π°Ρ‚Π°ΠΊΠΈ Π² этом случаС Ρ‚Π°ΠΊΠΈΠ΅:

ИспользованиС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° none

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

Рассмотрим ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ Π°Ρ‚Π°ΠΊΡƒ Π½Π° нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Наш Ρ‚ΠΎΠΊΠ΅Π½ Π² Π½Π΅Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ считало нас администратором. Для этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ admin Π² ΠΏΠΎΠ»Π΅ role ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. Но ΠΏΡ€ΠΈ внСсСнии Π² Ρ‚ΠΎΠΊΠ΅Π½ этого измСнСния подпись Ρ‚ΠΎΠΊΠ΅Π½Π° станСт Π½Π΅Π²Π°Π»ΠΈΠ΄Π½ΠΎΠΉ, ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ JWT.

Для ΠΎΠ±Ρ…ΠΎΠ΄Π° Π·Π°Ρ‰ΠΈΡ‚Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля alg Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Ρ‚ΠΎΠΊΠ΅Π½Π° Π½Π° none. Наш Ρ‚ΠΎΠΊΠ΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄:

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ none, подпись отсутствуСт. Π’ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ наш JWT Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ: eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJpZCI6IjEzMzciLCJ1c2VybmFtZSI6ImJpem9uZSIsImlhdCI6MTU5NDIwOTYwMCwicm9sZSI6ImFkbWluIn0

Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΎΠΊΠ΅Π½ ΠΌΡ‹ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ Π½Π° сСрвСр. УязвимоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ JWT ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ² Π² Π½Π΅ΠΌ alg: none, ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ этот Ρ‚ΠΎΠΊΠ΅Π½ Π±Π΅Π· всяких ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ Π±Ρ‹Π» Π»Π΅Π³ΠΈΡ‚ΠΈΠΌΠ½Ρ‹ΠΌ, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Π΅Π³ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ администратора.

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠΉ Π°Ρ‚Π°ΠΊΠΈ:

ИзмСнСниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° подписи

ΠŸΡ€ΠΈ использовании асиммСтричных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² подпись Ρ‚ΠΎΠΊΠ΅Π½Π° осущСствляСтся с использованиСм ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° сСрвиса, Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° подписи β€” с использованиСм ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° сСрвиса.

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

Для рассмотрСния ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° этого Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π°Ρ‚Π°ΠΊΠΈ Π½Π°ΠΌ понадобится Π½ΠΎΠ²Ρ‹ΠΉ JWT:

Π’ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEzMzciLCJ1c2VybmFtZSI6ImJpem9uZSIsImlhdCI6MTU5NDIwOTYwMCwicm9sZSI6InVzZXIifQ.YLOVSKef-paSnnM8P2JLaU2FiS8TbhYqjewLmgRJfCj1Q6rVehAHQ-lABnKoRjlEmHZX-rufHEocDxGUYiGMjMexUQ3zt-WqZITvozJ4pkvbV-mJ1nKj64NmqaR9ZkBWtmF-PHJX50eYjgo9rzLKbVOKYOUa5rDkJPHP3U0aaBXFP39zsGdOTuELv436WXypIZBeRq2yA_mDH13TvzegWCK5sjD4Gh177bCq57tBYjhGIQrDypVe4cWBPlvwFlmG8tdpWGu0uFp0GcbTAfLUlbTSuGROj88BY0XeUs0iqmGlEICES3uqNx7vEmdT5k_AmL436SLedE0VHcyxve5ypQ

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² этом случаС ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ для подписи Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ RS256, Π½Π°ΠΌ понадобятся ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΈ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ΠΈ.

ΠŸΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠŸΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡

Для тСстов ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сайт jwt.io

Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈΠ˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ JWT

Как ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌ Ρ‚ΠΎΠΊΠ΅Π½:

Π’ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈ зполСзная Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠžΡΡ‚Π°Π΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ подпись с использованиСм ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° сСрвиса.

Для Π½Π°Ρ‡Π°Π»Π° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ Π² hex-прСдставлСниС:

Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π—Π°Ρ‚Π΅ΠΌ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ подпись с использованиСм openSSL:

Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ E1R1nWNsO-H7h5WoYCBnm6c1zZy-0hu2VwpWGMVPK2g добавляСм ΠΊ ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉΡΡ строкС, ΠΈ наш Ρ‚ΠΎΠΊΠ΅Π½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6IjEzMzciLCJ1c2VybmFtZSI6ImJpem9uZSIsImlhdCI6MTU5NDIwOTYwMCwicm9sZSI6ImFkbWluIn0.E1R1nWNsO-H7h5WoYCBnm6c1zZy-0hu2VwpWGMVPK2g

ΠŸΠΎΠ΄ΡΡ‚Π°Π²Π»ΡΠ΅ΠΌ Π² ΠΏΠΎΠ»Π΅ secret Π½Π° jwt.io наш ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡, ΠΈ JWT ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ. НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π³Π°Π»ΠΎΡ‡ΠΊΡƒ secret base64 encoded.

Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Token Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Для прСдотвращСния Ρ‚Π°ΠΊΠΎΠΉ Π°Ρ‚Π°ΠΊΠΈ рСкомСндуСтся:

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

JSON Web Tokens β€” популярная ΠΈ удобная тСхнология. ΠŸΡ€ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ использовании JWT избавляСт ΠΎΡ‚ распространСнных ошибок нСдостаточной Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, позволяСт просто ΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвисами, ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΄ΠΈΠ½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ Π²Ρ…ΠΎΠ΄Π° Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ сСрвисы с ΠΎΠ΄Π½ΠΈΠΌΠΈ ΠΈ Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ ΡƒΡ‡Π΅Ρ‚Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сСрвиса.

ВмСстС с Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ использовании JWT ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π½ΡƒΡ‚ΡŒ свою систСму сущСствСнным рискам, Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ ΠΊΠΎΠΌΠΏΡ€ΠΎΠΌΠ΅Ρ‚Π°Ρ†ΠΈΠΈ ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Ρ… записСй Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ всСх ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ систСмы.

Π˜Ρ‚Π°ΠΊ, для бСзопасного использования JWT слСдуСт:

ПослС Π±Π΅Π³Π»ΠΎΠ³ΠΎ знакомства с JSON web tokens ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒΡΡ Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ встроСны Π² соврСмСнныС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ OAuth ΠΈΠ»ΠΈ OpenID. Однако это Π½Π΅ совсСм Ρ‚Π°ΠΊ. JSON Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² этих систСмах, Π½ΠΎ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈΡ… Ρ‡Π°ΡΡ‚ΡŒΡŽ. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, сфСра ΠΈΡ… использованиС Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΡˆΠΈΡ€Π΅ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ.

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

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

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