JWT аркылуу аутентификация
Абалы жок серверде колдонуучунун ким экенин далилдөө — токендерди кол коюу, сырсөздөрдү хештөө, маршруттарды коргоо
- аутентификация менен авторизациянын айырмасын түшүндүрүүнү,
- сырсөздөрдү
bcryptменен хештөөнү жана текшерүүнү (ачык текстти эч качан сактабай), - JWT'лерди
jsonwebtokenкитепканасы менен кол коюуну жана текшерүүнү, - жеке маршруттарды коргогон middleware жазууну жана токендердин чыныгы соодалашууларын түшүнүүнү.
1. Аутентификация жана авторизация, жана абалсыздык маселеси
Аутентификация «сиз кимсиз?» деген суроого жооп берет — электрондук почта жана сырсөз менен кирүү. Авторизация «сизге эмне кылууга уруксат?» деген суроого жооп берет — мисалы, колдонуучуну жалаң гана администратор өчүрө алат. Булар башка кадамдар: адегенде аутентификациядан өтөсүз, анан сервер ар бир аракетти авторизациялайт.
Кыйынчылык мына мында. HTTP абалсыз (stateless): ар бир суроо-талап өз алдынча турат жана сервер мурункусу тууралуу эстутум сактабайт. Ошондо кирүүдөн кийин экинчи суроо-талап анын ошол эле адам экенин кантип далилдейт? Эки классикалык жооп:
- Сервердик сессиялар. Кирүүдө сервер сессия жазуусун сактайт жана клиентке cookie ичинде туш келди сессия идентификаторун жөнөтөт. Ар бир суроо-талапта сервер бул идентификаторду өз сактагычынан издейт. Жөнөкөй, бирок сервер ар бир кирген колдонуучуну эстеши керек, бул көп машинага масштабдоо үчүн кыйыныраак.
- Токендер (JWT). Кирүүдө сервер клиентке колдонуучунун инсандыгын мурдатан камтыган кол коюлган токен берет. Сервер эч нерсе сактабайт; ал жөн гана ар жолу кол тамганы кайра текшерет. Бул абалсыз аутентификация, жана ал табигый түрдө масштабдалат.
Салыштыруу. Сессия идентификатору — кийим сактагычтын номериндей: номер өз алдынча эч нерсени билдирбейт, жана сактагыч дал келүү тизмесин кармашы керек. JWT — жасалма голограммасы бар фестиваль билериги сыяктуу: билерик өзү «чоң киши, 3 күндүк пропуск» деп айтат, жана каалаган күзөтчү кассага чалбай эле голограмманын чыныгы экенин ырастай алат.