Вопрос заставит вас различать Аутентификацию, Авторизацию и Cookie, Сеанс, Токен.

Spring Boot Spring

Написал на прошлой неделе для начинающихДемонстрация Spring Security с JWT. Демонстрационный адрес:GitHub.com/snail Climb/…. Многие люди могут не иметь специального представления о некоторых общих понятиях в области авторизационной аутентификации, поэтому я написал статью, чтобы представить эти понятия. Для каждой части точки знаний в статье могут быть рекомендованные статьи, и вы можете увидеть ссылку на статью, прочитав исходный текст.

1. В чем разница между аутентификацией и авторизацией?

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

Проще говоря:

  • Аутентификация:Кто ты.
  • Авторизация:Что вы уполномочены делать.

Чуть более формальное (и подробное) утверждение:

  • АутентификацияЭто учетные данные для проверки вашей личности (например, имя пользователя/идентификатор пользователя и пароль), благодаря которым система узнает, что вы — это вы, а это означает, что система существует как пользователь. Таким образом, аутентификация называется аутентификацией личности/пользователя.
  • АвторизацияПроисходит после **Аутентификации**. Авторизация, вы должны понять, просто взглянув на смысл, она в основном контролирует наш доступ в систему. Например, к некоторым определенным ресурсам могут получить доступ только люди с определенными разрешениями, такими как администратор, а некоторые операции с системными ресурсами, такие как удаление, добавление и обновление, могут быть доступны только определенным людям.

Эти два обычно используются вместе в нашей системе для защиты безопасности нашей системы.

2. Что такое файл cookie? Какова функция файла cookie? Как использовать файл cookie на сервере?

2.1 Что такое файл cookie?Какова функция файла cookie?

И файлы cookie, и сеансы — это сеансовые методы, используемые для отслеживания личности пользователей браузера, но сценарии их применения различаются.

Википедия определяет файлы cookie следующим образом: файлы cookie — это данные (обычно зашифрованные), которые определенные веб-сайты хранят на локальном терминале пользователя для идентификации пользователя. Проще говоря:Файлы cookie хранятся на клиенте и обычно используются для сохранения информации о пользователе..

Вот несколько примеров использования файлов cookie:

  1. Мы сохраняем информацию о вошедшем в систему пользователе в файле cookie, и при следующем посещении веб-сайта страница может автоматически заполнить некоторую основную информацию, чтобы вы могли войти в систему. Помимо прочего, файлы cookie могут сохранять пользовательские настройки, темы и другую информацию о настройках.
  2. Используйте куки для сохранения сеансов или токенов и добавляйте куки при отправке запросов на серверную часть, чтобы серверная часть могла получить сеанс или токен. Таким образом, текущее состояние пользователя может быть записано, поскольку протокол HTTP не имеет состояния.
  3. Файлы cookie также могут использоваться для записи и анализа поведения пользователей. В качестве простого примера, когда вы совершаете покупки в Интернете, поскольку протокол HTTP не имеет состояния, если сервер хочет получить статус вашего пребывания на определенной странице или какие продукты вы просматривали, общий метод реализации заключается в сохранении этой информации. в куки

2.2 Как я могу использовать файлы cookie на стороне сервера?

Эта часть ссылки на содержание:в ее сообщениях ian.com/blog/cookie…Содержание использования файлов cookie в Boot можно посмотреть в этой статье.

1) Установить куки обратно клиенту

@GetMapping("/change-username")
public String setCookie(HttpServletResponse response) {
    // 创建一个 cookie
    Cookie cookie = new Cookie("username", "Jovan");
    //设置 cookie过期时间
    cookie.setMaxAge(7 * 24 * 60 * 60); // expires in 7 days
    //添加到 response 中
    response.addCookie(cookie);

    return "Username is changed!";
}

2) Используйте предоставленную Spring Framework@CookieValueАннотация для получения значения конкретного файла cookie

@GetMapping("/")
public String readCookie(@CookieValue(value = "username", defaultValue = "Atta") String username) {
    return "Hey! My username is " + username;
}

3) Прочитать все значения cookie

@GetMapping("/all-cookies")
public String readAllCookies(HttpServletRequest request) {

    Cookie[] cookies = request.getCookies();
    if (cookies != null) {
        return Arrays.stream(cookies)
                .map(c -> c.getName() + "=" + c.getValue()).collect(Collectors.joining(", "));
    }

    return "No cookies";
}

3. В чем разница между файлом cookie и сеансом? Как использовать сеанс для аутентификации?

Основная функция Session — запись состояния пользователя через сервер.Типичный сценарий — корзина покупок.Когда вы хотите добавить товар в корзину, система не знает, какой пользователь это сделал, потому что протокол HTTP не имеет состояния. После того, как сервер создает определенный сеанс для определенного пользователя, пользователь может быть идентифицирован и отслежен.

Данные cookie хранятся на стороне клиента (на стороне браузера), а данные сеанса хранятся на стороне сервера. Условно говоря, Session более безопасен. Если некоторая конфиденциальная информация файла cookie не записывается в файл cookie, лучше зашифровать информацию файла cookie и расшифровать ее на стороне сервера при ее использовании.

Итак, как использовать Session для аутентификации?

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

Session Based Authentication flow

  1. Пользователь отправляет имя пользователя и пароль на сервер для входа в систему.
  2. После аутентификации сервера сервер создает сеанс для пользователя и сохраняет информацию о сеансе.
  3. Сервер возвращает SessionID пользователю и записывает пользовательский файл cookie.
  4. Пока пользователь остается в системе, файл cookie будет отправляться с каждым последующим запросом.
  5. Сервер может сравнить идентификатор сеанса, хранящийся в файле cookie, с информацией о сеансе, хранящейся в памяти или в базе данных, чтобы проверить личность пользователя, и вернуть информацию об ответе клиента пользователя с текущим состоянием пользователя.

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

4. Что такое токен, что такое JWT, как пройти аутентификацию на основе токена?

Мы обсудили использование Session для аутентификации пользователей в предыдущем вопросе и поделились несколькими примерами использования Spring Session. Мы знаем, что информацию о сеансе необходимо сохранять на стороне сервера. Этот метод принесет некоторые неприятности, такие как необходимость обеспечения доступности сервера, сохраняющего информацию о сеансе, не подходит для мобильных терминалов (полагаясь на файлы cookie) и так далее.

Есть ли способ реализовать аутентификацию без самостоятельного хранения информации о сеансе? Просто используйте токен! JWT (веб-токен JSON) является реализацией этого метода. Таким образом, на стороне сервера не нужно сохранять данные сеанса. Нужно только сохранить токен, возвращаемый серверной стороной клиенту на стороне клиента, и улучшается масштабируемость.

JWT — это, по сути, подписанный фрагмент данных в формате JSON. Поскольку он подписан, получатель может проверить его подлинность.

НижеRFC 7519Более формальное определение JWT.

JSON Web Token (JWT) — это компактное, безопасное для URL-адресов средство представления утверждений для передачи между двумя сторонами. Утверждения в JWT кодируются как объект JSON, который используется в качестве полезной нагрузки структуры веб-подписи JSON (JWS). или в виде открытого текста структуры JSON Web Encryption (JWE), что позволяет снабжать утверждения цифровой подписью или защищать целостность с помощью кода аутентификации сообщений (MAC) и/или шифровать.JSON Web Token (JWT)

JWT состоит из 3 частей:

  1. Заголовок: метаданные, описывающие JWT. Определяет алгоритм генерации подписи и тип токена.
  2. Полезная нагрузка: используется для хранения данных, которые действительно необходимо доставить.
  3. Подпись: сервер проходитPayload,Headerи ключ(secret) генерируется с использованием алгоритма подписи, указанного в заголовке (по умолчанию - HMAC SHA256).

В приложении аутентификации на основе токенов сервер передаетPayload,Headerи ключ(secret) создает токен (Token) и воляTokenотправлено клиенту, клиентTokenСохраненный в файле cookie или localStorage, все будущие запросы от клиента будут содержать этот токен. Вы можете поместить его в файл cookie и отправить его автоматически, но это не может быть междоменным, поэтому лучше поместить его в поле «Авторизация» HTTP-заголовка:Authorization: Bearer Token.

Token Based Authentication flow

  1. Пользователь отправляет имя пользователя и пароль на сервер для входа в систему.
  2. Служба проверки подлинности отвечает подписанным JWT, в котором указан пользователь.
  3. Каждый раз, когда пользователь отправляет запрос на серверную часть, JWT будет включен в заголовок.
  4. Сервер проверяет JWT и получает от него информацию о пользователе.

Рекомендуемое чтение:

5 Что такое OAuth 2.0?

OAuth — это стандартный отраслевой протокол авторизации, который в основном используется для авторизации сторонних приложений для получения ограниченных разрешений. Хотя OAuth 2.0 представляет собой полную переработку OAuth 1.0, OAuth 2.0 быстрее и проще в реализации, а OAuth 1.0 устарел. Подробнее см.:rfc6749.

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

Наиболее распространенным сценарием OAuth 2.0 является сторонний вход.Когда ваш веб-сайт получает доступ к стороннему входу, обычно используется протокол OAuth 2.0.

Рекомендуемое чтение:

Ссылаться на

публика

Если вы хотите следить за моими обновленными статьями и делиться галантерейными товарами в режиме реального времени, вы можете подписаться на мой официальный аккаунт.

«Нападение на Java-интервью»:"Java Interview Assault" V2.0 PDF-версия, полученная из этого документа для интервью.публикаФоновый ответ"Блиц-интервью по Java"Получите это бесплатно!

Важные учебные ресурсы для Java-инженеров:Некоторые Java-инженеры обычно используют ключевые слова для фонового ответа общедоступной учетной записи учебных ресурсов."1"Вы можете получить его бесплатно без каких-либо уловок.

我的公众号