〰️
Programming with Java
  • Програмиране с JAVA
  • Обектно-ориентирано програмиране - 1 част
    • Лабораторно упражнение 1
      • Основи на програмирането с Java за начинаещи‎
        • Oбщи термини в Java
        • Основни характеристики на JAVA‎
        • Инсталиране на JDK
        • Инсталиране на Intellij
      • Първа програма в Java
      • Системен изход в JAVA
      • Дефиниране на променливи
      • Примитивни типове данни
      • Оператори
      • If-else
      • Switch-Case
      • For loop
      • While loop
      • Do-while loop
      • Continue
      • Break
      • Задачи
    • Лабораторно упражнение 2
      • Клас
      • Обект
      • Ключова дума new
      • Запазена дума static
      • Конвенции за именуване в Java
      • Wrapper Class
      • Сравняване на
      • Нуждата Wrapper Class
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 3
      • Наследяване
      • this и super
      • Модификатори за достъп
      • Капсулиране
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 4
      • Проследяване на грешки
      • Оценяване на изрази
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 5
      • Полиморфизъм
      • Абстрактен клас
      • Интерфейс
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 6
      • Разлика между Абстрактен клас и Интерфейс
        • Разлика 1
        • Разлика 2
        • Разлика 3
        • Разлика 4
        • Разлика 5
        • Разлика 6
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 7
      • String
      • Enum
      • Обработка на изключения
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 8
      • Генерични класове
      • Генеричен метод
      • Параметри на типа в Java Generics
      • Предимства на генериците
      • Генериците работят само с референтни типове
    • Лабораторно упражнение 9
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 10
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 11
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 12
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 13
      • Упражнения за извънаудиторна заетост
      • Упражнения за извънаудиторна заетост
  • Обектно-ориентирано програмиране - 2 част
    • Лабораторно упражнение 1
      • SRP - Single Responsibility Principle
        • Задачи
      • OCP - Open-Closed Principle
        • Задачи
    • Лабораторно упражнение 2
      • LSP - Liskov Substitution Principle
        • Задачи
      • ISP - Interface Segregation Principle
        • Задачи
      • DI - Dependency Inversion Principle
        • Задачи
    • Лабораторно упражнение 3
      • Singleton
        • Задачи
      • Builder
        • Задачи
    • Лабораторно упражнение 4
      • Factory Method
      • Abstract Factory
      • Задачи
    • Лабораторно упражнение 5
    • Лабораторно упражнение 6
      • Decorator
      • Bridge
        • Композиция
      • Задачи
    • Лабораторно упражнение 7
      • Adapter
      • Задачи
    • Лабораторно упражнение 8
      • Composite
      • Proxy
      • Задачи
    • Лабораторно упражнение 9
    • Лабораторно упражнение 10
      • Visitor
      • State
      • Задачи
    • Лабораторно упражнение 11
      • Observer
      • Задачи
    • Лабораторно упражнение 12
      • Chain of Responsibility
      • Command
      • Задачи
    • Лабораторно упражнение 13
  • Интернет технологии 2023
    • Лабораторно упражнение 1
      • HTTP протокол
        • Синтаксис на URL
        • HTTP съобщения
        • Методи за HTTP заявка
        • Кодове за състояние на HTTP отговор
      • Postman
        • Изпращане на заявка с Postman
        • Получаване на отговор
      • Задачи за работа с Postman
    • Лабораторно упражнение 2
      • Работа с Tomcat
      • Maven
      • Създаване на Maven проект в IntelliJ Ultimate Edition
      • Създаване на Maven проект в IntelliJ Community Edition
      • Създаване на Maven проект в Eclipse IDE
    • Лабораторно упражнение 3
      • Java Servlets
      • Жизнен цикъл на сървлета
      • Създаване на сървлети
      • Задачи за създаване на сървлети
    • Лабораторно упражнение 4
      • Extensible Markup Language
      • Java Architecture for XML Binding
      • JavaScript Object Notation
      • Задачи
    • Лабораторно упражнение 5
    • Лабораторно упражнение 6
      • Spring Boot
      • Създаване на Spring boot проект
      • Структура на Spring Boot проект
        • Файлът pom.xml
        • Main клас в Spring Boot
        • Управление на конфигурацията с application.properties
      • Задача
    • Лабораторно упражнение 7
      • Комуникационен поток и CRUD операции
      • ResponseEntity
      • Избрани анотации
      • Задача
    • Лабораторно упражнение 8
      • Lombok
      • Data transfer object (DTO)
      • Обработване на изключения в Spring Boot приложение
        • Клас Optional<T>
      • Валидиране на данните от заявката
      • Задачи
    • Лабораторно упражнение 9-10
      • Конфигуриране на PostgreSQL DB
      • Jakarta Persistence анотации
      • Repository слой
      • Задачи
    • Лабораторно упражнение 11
      • Проследяване на сесии
      • Филтри и FilterChain
      • Spring Security
        • Добавяне на Spring Security в Spring Boot приложение
        • Конфигуриране на филтри
        • Удостоверяване със Spring Security
        • Защита на метод със Spring Security
      • Задача
    • Лабораторно упражнение 12
      • JSON Web Token
      • Защита с помощта на JWT
      • Задача
    • Лабораторно упражнение 13
  • Програмиране за мобилни и Интернет устройства
    • Лабораторно упражнение 1
      • Задачи
    • Лабораторно упражнение 2
      • Среда за разработване
        • Създаване на проект
        • Структора на проект
        • Виртуално устройство с Android OS
      • Задача
    • Лабораторно упражнение 3
      • Activity
      • Layout
        • XML описание
      • Задача
    • Лабораторно упражнение 4
      • Activity Lifecycle
      • Intent
      • Слушатели на събитията и методи за обратно извикване
      • Задача
    • Лабораторно упражнение 5
      • Слушатели на събитията и методи за обратно извикване
      • Задача
    • Лабораторно упражнение 6
      • Фрагменти
      • DialogFragment
      • Задача
    • Лабораторно упражнение 7
      • Примери
        • BaseAdapter
        • ArrayAdapter
        • Custom ArrayAdapter
      • RecyclerView
        • Пример
      • CardView
      • Задача
    • Лабораторно упражнение 8
      • Runnable
      • HandlerThread
      • ThreadPoolExecutor
      • Задача
    • Лабораторно упражнение 9
      • Задача
      • Задача
      • Пример
  • Интернет Технологии
    • Лабораторно упражнение 1
      • Инсталиране и настройка на необходимата среда за работа в упражненията
      • Maven
      • Създаване на Maven проект в Eclipse IDE
      • Създаване на Maven проект в IntelliJ
      • Работа с Tomcat
      • Задача
    • Лабораторно упражнение 2
      • HTML форми
      • Cascading Style Sheets (CSS)
        • CSS селектори
        • Някои CSS свойства
      • Задача
    • Лабораторно упражнение 3
      • Java Servlets
      • Жизнен цикъл на сървлета
      • Създаване на сървлети
      • Задачи
    • Лабораторно упражнение 4
      • Java Server Pages технология. Същност и детайли
      • Пренасочване между Servlet и JSP
      • Задачи
    • Лабораторно упражение 5
      • Build pattern
      • JavaBean
      • Задачи
    • Лабораторно упражение 6
      • Проследяване на сесии
      • Управление на бисквитки (Cookies)
      • Задачи
    • Лабораторно упражнение 7
      • Проследяване на сесии
      • Управление на бисквитки (Cookies)
      • Servlet Filter
      • Задачи
    • Лабораторно упражнение 8
      • Servlet Filter
      • Прихващане на грешки
      • Задачи
    • Лабораторно упражнение 9
      • Extensible Markup Language
      • JavaScript Object Notation
        • Fetch
      • Задача
    • Лабораторно упражнение 10
      • Java Architecture for XML Binding
      • Задачи
Powered by GitBook
On this page
  • Употреба
  • Структура на JSON Web Token
  • Всичко заедно
  • Как работят JSON уеб токените?

Was this helpful?

  1. Интернет технологии 2023
  2. Лабораторно упражнение 12

JSON Web Token

JSON Web Token (JWT) е отворен стандарт, който дефинира компактен и самостоятелен начин за сигурно предаване на информация между страните под формата на JSON обект. Тази информация може да бъде проверена и надеждна, тъй като е цифрово подписана. JWT могат да бъдат подписани с помощта на secret (с алгоритъма HMAC) или двойка публичен/частен ключ, използвайки RSA или ECDSA.

Употреба

Ето някои сценарии, при които JSON уеб токените са полезни:

· Authorization: Това е най-честият сценарий за използване на JWT. След като потребителят влезе, всяка следваща заявка ще включва JWT, позволявайки на потребителя достъп до маршрути, услуги и ресурси, които са разрешени с този токен. Единичното влизане е функция, която широко използва JWT в днешно време, поради малкият изискуем ресурс и възможността да се използва лесно в различни домейни.

· Обмен на информация: JSON уеб токените са добър начин за сигурно предаване на информация между страните. Тъй като JWT могат да бъдат подписани – например с помощта на двойки публичен/частен ключ – можете да сте сигурни, че подателите са тези, за които се представят. Освен това, тъй като подписът се изчислява с помощта на хедъра и полезният товар на съобщението, можете също да проверите дали последното не е било манипулирано.

Структура на JSON Web Token

В своята компактна форма JSON уеб токените се състоят от три части, разделени с точки (.), които са:

· Хедър;

· Payload;

· Подпис.

Следователно JWT обикновено изглежда по следния начин.

xxxxx.yyyyy.zzzzz

Хедър

Хедърът обикновено се състои от две части: типа на токена, който е JWT, и използвания алгоритъм за подписване, като HMAC SHA256 или RSA. Например:

{
	"alg": "HS256",
  	"typ": "JWT"
} 

Този JSON е Base64Url кодиран, за да формира първата част на JWT.

Payload

Втората част от токена е полезният товар, който съдържа claims. Claims са изявления за обект (обикновено потребител) и допълнителни данни. Има три вида claims: регистрирани, публични и частни claims.

· Регистрирани claims: Това са набор от предварително дефинирани claims, които не са задължителни, но се препоръчват, за да предоставят набор от полезни, оперативно съвместими искове. Някои от тях са: iss (издател), exp (време на изтичане), sub (тема), aud (аудитория) и други. Забележете, че имената на искове са дълги само три знака, тъй като JWT е предназначен да бъде компактен.

· Публични claims: Те могат да бъдат дефинирани по желание от тези, които използват JWT. Но за да се избегнат сблъсъци, те трябва да бъдат дефинирани в IANA JSON Web Token Registry или да бъдат дефинирани като URI, който съдържа устойчиво на сблъсък пространство от имена.

· Частни claims: Това са персонализирани claims, създадени за споделяне на информация между страни, които са съгласни да ги използват, и не са нито регистрирани, нито публични claims. Примерен payload може да бъде:

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

След това полезният товар се кодира в Base64Url, за да формира втората част на JSON Web Token. Имайте предвид, че за подписани токени тази информация, макар и защитена срещу подправяне, може да бъде прочетена от всеки. Не поставяйте секретна информация в полезния товар или хедъра на JWT, освен ако не е шифрована.

Подпис

За да създадете частта за подпис, трябва да вземете кодирания хедър, кодирания полезен товар, секретен ключ, алгоритъма, посочен в хедъра, и да го подпишете. Например, ако искате да използвате алгоритъма HMAC SHA256, подписът ще бъде създаден по следния начин:

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

Подписът се използва, за да се потвърди, че съобщението не е променено по пътя, а в случай на токени, подписани с частен ключ, може също така да провери дали подателят на JWT е този, за когото се представя.

Всичко заедно

Резултатът е три Base64-URL низа, разделени с точки, които могат лесно да се предават в HTML и HTTP среди, като същевременно са по-компактни в сравнение със стандартите, базирани на XML, като SAML. Следващото показва JWT, в който се съдържат показаните по-горе кодирани хедър и полезен товар, подписани със secret.

Как работят JSON уеб токените?

При удостоверяване, когато потребителят влезе успешно, използвайки своите идентификационни данни, ще бъде върнат JSON уеб токен. Тъй като токените са идентификационни данни, трябва да се внимава много, за да се предотвратят проблеми със сигурността. По принцип не трябва да съхранявате токени по-дълго от необходимото. Също така не трябва да съхранявате чувствителни данни за сесията в хранилището на браузъра поради липса на сигурност. Всеки път, когато потребителят иска да получи достъп до защитен маршрут или ресурс, потребителският агент трябва да изпрати JWT, обикновено в хедъра Authorization, използвайки Bearer schema. Съдържанието на хедъра трябва да изглежда по следния начин:

Authorization: Bearer <token>

В определени случаи това може да бъде механизъм за оторизация без запазване на състояние. Защитените маршрути на сървъра ще проверяват за валиден JWT в хедъра Authorization и ако той присъства, на потребителя ще бъде разрешен достъп до защитените ресурси. Имайте предвид, че ако изпращате JWT токени чрез HTTP хедъри, трябва да се опитате да предотвратите увеличаването на техния размер. Някои сървъри не приемат повече от 8 KB в хедърите.

PreviousЛабораторно упражнение 12NextЗащита с помощта на JWT

Last updated 2 years ago

Was this helpful?