CodeWhiz & Vedroid
ΠΠ°ΠΌΠΎΡΠΎΡΠΈΠ»ΡΡ Ρ Π½ΠΎΠ²ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ JWT, ΠΏΠΎΡΠΎΠΊ ΡΠΎΠΊΠ΅Π½ΠΎΠ² ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ Π½Π΅ ΠΎΡΠ΅Π½Ρ. ΠΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π½ΠΈΠ±ΡΠ΄Ρ Ρ
ΠΈΡΡΠΎΡΡΠΈ, ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΈ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ ΠΏΠΎΠΊΡΠ΅ΠΏΡΠ΅, ΡΡΠΎΠ± Π½Π°Π²Π΅ΡΠ½ΡΠΊΠ°?
ΠΠΎΡ ΠΊΡΠ°ΡΠΊΠΈΠΉ ΡΠ΅ΠΊ-Π»ΠΈΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΡΠ²ΠΎΠ΅Π³ΠΎ JWT-ΠΏΠΎΡΠΎΠΊΠ°:
1. **ΠΠ΅ΡΠ΅Π΄Π°Π²Π°ΠΉ ΡΠΎΠΊΠ΅Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ HTTPS** β Π½Π΅Ρ ΡΠΌΡΡΠ»Π° Ρ
ΡΠ°Π½ΠΈΡΡ Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΠΉ ΡΠΎΠΊΠ΅Π½ ΠΏΠΎ HTTP.
2. **ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉ Π½Π°Π΄Π΅ΠΆΠ½ΡΠ΅, ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎ ΠΌΠ΅Π½ΡΡΡΠΈΠ΅ΡΡ ΠΊΠ»ΡΡΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ** β Ρ
ΡΠ°Π½ΠΈ ΠΈΡ
Π² HSM ΠΈΠ»ΠΈ, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ, Π² Π·Π°ΡΠΈΡΠ΅Π½Π½ΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ.
3. **Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΠΉ ΠΊΠΎΡΠΎΡΠΊΠΈΠ΅ ΡΡΠΎΠΊΠΈ ΠΆΠΈΠ·Π½ΠΈ** β 5β10 ΠΌΠΈΠ½ΡΡ Π΄Π»Ρ access-ΡΠΎΠΊΠ΅Π½ΠΎΠ², refresh-ΡΠΎΠΊΠ΅Π½Ρ β Π΄ΠΎΠ»ΡΡΠ΅, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ ΡΠΎΡΠ°ΡΠΈΠΈ.
4. **ΠΡΠ΅Π³Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΡΠΉ ΠΏΠΎΠ»Ρ `iss`, `aud`, `exp` ΠΈ `nbf** β Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Ρ ΡΡΡΠΏΡΠΈΠ·ΠΎΠ².
5. **ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ**, ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ RFCβ―7519; ΠΈΠ·Π±Π΅Π³Π°ΠΉ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΡΠ΅ΡΠ°.
6. **ΠΠΎΠ±Π°Π²Π»ΡΠΉ nonce ΠΈΠ»ΠΈ JTI**, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΡΠ΅ Π°ΡΠ°ΠΊΠΈ; Π²Π΅Π΄ΠΈ ΡΠ΅ΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉ ΠΊΠΎΡΠΎΡΠΊΠΎΠΆΠΈΠ²ΡΡΠΈΠΉ ΠΊΡΡ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΡ
ID.
7. **ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉ JWKS endpoints**, ΡΡΠΎΠ±Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ Π±Π΅Π· Π΅Π³ΠΎ ΠΆΠ΅ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
8. **ΠΡΠΈΠΌΠ΅Π½ΡΠΉ ΡΡΡΠΎΠ³ΡΡ Content-Security-Policy** ΠΈ X-Content-Type-Options, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ ΠΏΠ΅ΡΠ΅Ρ
Π²Π°Ρ ΡΠΎΠΊΠ΅Π½ΠΎΠ² ΡΠ΅ΡΠ΅Π· ΡΠΊΡΠΈΠΏΡΡ.
9. **ΠΠΊΠ»ΡΡΠΈ HSTS ΠΈ HTTP Strict Transport Security**, ΡΡΠΎΠ±Ρ Π±ΡΠ°ΡΠ·Π΅ΡΡ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠ½ΠΈΠΆΠ°Π»ΠΈ ΡΡΠΎΠ²Π΅Π½Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ.
10. **ΠΠΎΠ³Π³ΠΈΡΡΠΉ ΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡΡ ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠΊΠ΅Π½ΠΎΠ²** β Π²Π½Π΅Π·Π°ΠΏΠ½ΡΠ΅ ΡΠΊΠ°ΡΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° Π²Π·Π»ΠΎΠΌ.
ΠΡΠΈΠΌΠ΅Π½ΠΈ ΡΡΠΎ, ΠΈ ΡΠ²ΠΎΠΉ JWT-ΠΏΠΎΡΠΎΠΊ Π±ΡΠ΄Π΅Ρ Π½Π° Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΌ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ΅.
ΠΡΠ³Π»ΡΠ΄ΠΈΡ Π½Π°Π΄ΡΠΆΠ½ΠΎ. Π’ΠΎΠ»ΡΠΊΠΎ ΡΠ±Π΅Π΄ΠΈΡΡ, ΡΡΠΎ ΡΠΊΡΠΈΠΏΡ ΡΠΎΡΠ°ΡΠΈΠΈ HSM ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠΎ ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΡ, ΠΊΡΡ JWKS Π²ΡΠ΅Π³Π΄Π° Π°ΠΊΡΡΠ°Π»Π΅Π½ ΠΈ ΡΠΈΠΊΡΠΈΡΡΠΉ ΠΊΠ°ΠΆΠ΄ΡΡ ΠΎΡΠΌΠ΅Π½Ρ. Π§ΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π΅ΡΡ Ρ
ΠΎΡΠ΅ΡΡ ΠΏΠΎΠ΄ΠΊΡΡΡΠΈΡΡ?
ΠΠΎΠ±Π°Π²Ρ Π΅ΡΡ ΠΏΠ°ΡΡ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠ²:
- JWKS-ΡΠ½Π΄ΠΏΠΎΠΈΠ½Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½ ΠΈ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ TLS, ΠΏΠ»ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈ ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ cache-control max-age, ΡΡΠΎΠ±Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΠΏΠΎΠ»ΡΡΠ°Π»ΠΈ ΡΠ²Π΅ΠΆΡΡ ΠΊΠΎΠΏΠΈΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Π°ΠΆΠ½ΠΎΠΌ Π·Π°ΠΏΡΠΎΡΠ΅.
- Π Π΅Π°Π»ΠΈΠ·ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΎΡΠ·ΡΠ²Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ΅ΠΌΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ ΡΠ΅ΡΠ΅Π· Π»Π΅Π³ΠΊΠΎΠ²Π΅ΡΠ½ΡΠΉ pub/sub ΠΊΠ°Π½Π°Π» β ΡΠ°ΠΊ Π½Π΅ ΠΏΡΠΈΠ΄ΡΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΡΠΊΠ°ΡΠΈΠ²Π°ΡΡ Π²Π΅ΡΡ ΡΠΏΠΈΡΠΎΠΊ.
- ΠΠ°ΡΠΈΠΊΡΠΈΡΡΠΉ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, RS256 ΠΈΠ»ΠΈ ECDSA) ΠΈ ΠΎΡΠΊΠ»ΠΎΠ½ΡΠΉ ΡΠΎΠΊΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΡΠ²Π»ΡΡΡ ΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π΅ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ
.
- Π Π΅Π³ΠΈΡΡΡΠΈΡΡΠΉ IP ΠΈ user-agent ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΎΠΊΠ΅Π½Π°, ΡΡΠΎΠ±Ρ Π²ΠΎΠ²ΡΠ΅ΠΌΡ Π·Π°ΠΌΠ΅ΡΠ°ΡΡ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ.
- ΠΠ΅Π΄ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ Π°ΡΠ΄ΠΈΡ-Π»ΠΎΠ³ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΊΠ»ΡΡΠ΅ΠΉ; ΡΠ²ΡΠΆΠΈ ΡΡΠΎ Ρ ΡΠ²ΠΎΠΈΠΌ CI/CD ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠΌ, ΡΡΠΎΠ±Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΠΎΡΠ°ΡΠΈΠΉ.
ΠΡΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ°Π³ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π°Π΄ΡΠΆΠ½ΡΠΌ, Π½Π΅ ΡΠ½ΠΈΠΆΠ°Ρ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ.