5.11 Реализация аутентификации с помощью OAuth2 и JWT
7 из 7 шагов пройдено
2 из 2 баллов  получено

Защита приложения с помощью OAuth2 и JWT

JSON Web Token (JWT) — это JSON объект, который определен в открытом стандарте RFC 7519. Когда данные формы отправляются на сервер от клиента, в качестве ответа отправляется токен доступа, который является подписанным JWT. Обычно выполняется фоновая проверка для проверки учетных данных, отправленных на сервер, перед созданием токена для дальнейшей авторизации. Чтобы авторизовать аутентифицированного пользователя, JWT имеет префикс Bearer при отправке через заголовок для авторизации действия на сервере.

Есть несколько веских причин, по которым JWT является таким популярным стандартом:

  • Они автономны. JWT может содержать данные пользователя. Таким образом, вам не нужно запрашивать эту информацию у сервера базы данных/аутентификации при каждом запросе.
  • Они предлагают надежные гарантии безопасности. JWT имеют цифровую подпись, что защищает их от изменения клиентом или злоумышленником.
  • JWT хранятся только на клиенте. Вы создаете JWT на сервере и отправляете их клиенту. Затем клиент отправляет JWT с каждым запросом.
  • Они эффективны и быстро проверяются. Это связано с тем, что JWT не требуют запросов к базе данных.

Когда сервер аутентификации успешно проверяет учетные данные пользователя (через OAuth), ему также необходимо передать данные пользователя клиентскому приложению. Чтобы клиентское приложение могло проверить детали, можно использовать JWT для обеспечения эффективности процесса.

JWT обычно имеет заголовок (HEADER), полезную нагрузку (PAYLOAD) и подпись (SIGNATURE), разделенные точками, формат выглядит следующим образом:

header.payload.signature

На примере самого JWT кода, он может выглядеть следующим образом:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

А примерный JSON в JWT, отправленный сервером OAuth, выглядит следующим образом (пример из входа в Google):

{
    "iss": "https://accounts.google.com",
    "azp": "1234987819200.apps.googleusercontent.com",
    "aud": "1234987819200.apps.googleusercontent.com",
    "sub": "10769150350006150715113082367",
    "at_hash": "HK6E_P6Dh8Y93mRNtsDB1Q",
    "email": "jsmith@example.com",
    "email_verified": "true",
    "iat": 1353601026,
    "exp": 1353604926,
    "nonce": "0394852-3190485-2490358",
    "hd": "example.com",
}

Как видите, есть много информации, передаваемой с сервера OAuth (в данном случае Google) в клиентское приложение. Стоит отметить, что некоторые из полей в вышеуказанной полезной нагрузке JSON специфичны для Google (например, hd). Другие сайты и проекты могут использовать совсем другое содержание, оно никак не регламентировано.

И в качестве заключения, простыми словами JWT — это закодированная строка, обычно содержащая словарь, содержащий полезную нагрузку, подпись и алгоритм. JWT подписываются с использованием уникального ключа, известного только серверу и клиенту, чтобы избежать подделки.

Приступим к реализации в следующем шаге.


Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Нет обсуждений. Начните первое.