Last updated
Last updated
JWT е компактен начин за прилагане на удостоверяване в модерни уеб приложения. За да го приложим, ще използваме библиотеката jjwt, която е JWT библиотека за Java и Android и се използва за създаване и анализиране на JWT. Трябва да добавим следните зависимости в pom.xml.
Следващите стъпки демонстрират как да активирате JWT удостоверяване и упълномощаване в бекенда. За реализацията им са необходимо от предходното упражнение да сте предвидили:
· Клас със SecurityFilterChain метод за задаване на правила за упълномощаване;
· Сервизен клас с метод за вписване на потребителя;
· Клас, имплементиращ UserDetailsService и неговия метод loadUserByUsername();
· Контролер с точка за достъп за вписване на потребителя.
Създайте клас с метод за генериране на токен след успешно удостоверяване на потребителя.
В персонализирана реализация на SecurityFilterChain допълнете правилата с изискване сесия да не бъде създавана или използвана от Spring Security.
В метода за вписване заменете добавянето на данните на вписания потребител към сесийния обект с логика по създаване на токен. Нека методът за връща създадения токен като текст.
Добавете клас, с помощта на който създаденият токен да бъде върнат като отговор на клиента.
По отношение на точката за достъп за вписване на потребителя задайте отговорът да включва генерирания токен.
Изпробвайте създадената функционалност за създаване на токен c Postman.
1. Създайте клас, който имплементира интерфейса AuthenticationEntryPoint и неговия метод commence().
AuthenticationEntryPoint се използва за изпращане на HTTP отговор, който да изисква вписване от страна на клиент. Понякога клиентът проактивно включва идентификационни си данни (като потребителско име и парола), за да поиска достъп до ресурс. Тогава Spring Security не трябва да предоставя HTTP отговор, който изисква идентификационни данни от клиента, тъй като те вече са включени.
В други случаи обаче клиентът прави неупълномощена заявка към ресурс, до който не е оторизиран за достъп. В този случай се използва реализация на AuthenticationEntryPoint за изискване на идентификационни данни от клиента. Тя може да извърши пренасочване към страница за влизане, да отговори с хедър WWW-Authenticate или да предприеме друго действие. В нашия случай, тъй като нямаме налична страница за вписване, ще бъде хвърлено authException изключение.
2. Допълнете класа JWTTokenProvider с методи за:
a. връщане на потребителско име от подаден токен;
b. валидиране на подаден токен;
Създайте потребителски филтър, който да използва създадения токен за удостоверяване на потребителя.
Включете филтъра в SecurityFilterChain метода. Нека той да се изпълнява непосредствено преди UsernamePasswordAuthenticationFilter. Добавете и JwtAuthenticationEntryPoint като ресурс, отговарящ за обработка на изключения, свързани с оторизацията.
Изпробвайте функционалността с Postman. Полученият при вписването токен се добавя към заявката към последващ ресурс посредством опцията Bearer token.
1. Към application.properties добавете свойства, задаващи тайния ключ (secret) на токена и продължителността на неговата валидност в милисекунди. За криптиране на ключа можете да използвате инструмента: , а за изчисляване на продължителността на валидност на токена в милисекунди - https://www.convertworld.com/en/time/milliseconds.html.