HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Авторизация это проверка того, какие действия пользователь может выполнять, и к каким ресурсам он имеет доступ. В отличие от аутентификации, которая просто подтверждает, что пользователь является тем, за кого себя выдает, авторизация отвечает на вопрос: "Что пользователь может делать?".</p>
1 <p>Авторизация это проверка того, какие действия пользователь может выполнять, и к каким ресурсам он имеет доступ. В отличие от аутентификации, которая просто подтверждает, что пользователь является тем, за кого себя выдает, авторизация отвечает на вопрос: "Что пользователь может делать?".</p>
2 <p>Обычно авторизация реализуется на стороне сервера. Когда пользователь отправляет запрос на выполнение какой-либо операции или доступ к ресурсу, сервер проверяет, имеет ли он право на это. Эта проверка может включать взаимодействие с базой данных или специальным сервисом, который хранит информацию о правах доступа пользователя.</p>
2 <p>Обычно авторизация реализуется на стороне сервера. Когда пользователь отправляет запрос на выполнение какой-либо операции или доступ к ресурсу, сервер проверяет, имеет ли он право на это. Эта проверка может включать взаимодействие с базой данных или специальным сервисом, который хранит информацию о правах доступа пользователя.</p>
3 <p>Представьте себе веб-приложение для управления проектами. Допустим, что в системе есть два типа пользователей: администраторы и обычные пользователи. Администратор может создавать, редактировать и удалять проекты, тогда как обычный пользователь может только просматривать и комментировать их. Когда пользователь пытается удалить проект, сервер должен проверить, является ли он администратором. Эта проверка и есть процесс авторизации.</p>
3 <p>Представьте себе веб-приложение для управления проектами. Допустим, что в системе есть два типа пользователей: администраторы и обычные пользователи. Администратор может создавать, редактировать и удалять проекты, тогда как обычный пользователь может только просматривать и комментировать их. Когда пользователь пытается удалить проект, сервер должен проверить, является ли он администратором. Эта проверка и есть процесс авторизации.</p>
4 <p>В распределенных системах, где множество сервисов взаимодействуют друг с другом, авторизация может стать сложной задачей по нескольким причинам:</p>
4 <p>В распределенных системах, где множество сервисов взаимодействуют друг с другом, авторизация может стать сложной задачей по нескольким причинам:</p>
5 <ul><li><strong>Высокая нагрузка на серверы:</strong>Каждое обращение требует запроса на сервер для проверки прав доступа, что может привести к повышенной нагрузке и задержкам.</li>
5 <ul><li><strong>Высокая нагрузка на серверы:</strong>Каждое обращение требует запроса на сервер для проверки прав доступа, что может привести к повышенной нагрузке и задержкам.</li>
6 <li><strong>Узкое место системы:</strong>Если сервер авторизации становится недоступным, вся система может перестать работать.</li>
6 <li><strong>Узкое место системы:</strong>Если сервер авторизации становится недоступным, вся система может перестать работать.</li>
7 <li><strong>Задержки из-за сетевого взаимодействия:</strong>Взаимодействие между различными компонентами системы, особенно в микросервисной архитектуре, может приводить к задержкам из-за сетевых вызовов.</li>
7 <li><strong>Задержки из-за сетевого взаимодействия:</strong>Взаимодействие между различными компонентами системы, особенно в микросервисной архитектуре, может приводить к задержкам из-за сетевых вызовов.</li>
8 </ul><p>Чтобы преодолеть эти сложности, авторизационные данные можно перенести на сторону клиента, передав их ему после успешной аутентификации. Клиент же, обращаясь к ресурсам внутри системы, будет передавать эти данные на каждый запрос, помогая сервисам определить, имеет ли он права на такой запрос. Главная проблема в такой схеме, как обеспечить невозможность подмены данных клиентов? Ведь если передавать их в открытом виде, то клиент сможет изменить значения и, например, стать администратором с полным набором прав.</p>
8 </ul><p>Чтобы преодолеть эти сложности, авторизационные данные можно перенести на сторону клиента, передав их ему после успешной аутентификации. Клиент же, обращаясь к ресурсам внутри системы, будет передавать эти данные на каждый запрос, помогая сервисам определить, имеет ли он права на такой запрос. Главная проблема в такой схеме, как обеспечить невозможность подмены данных клиентов? Ведь если передавать их в открытом виде, то клиент сможет изменить значения и, например, стать администратором с полным набором прав.</p>
9 <h2>JWT</h2>
9 <h2>JWT</h2>
10 <p>Для решения этой задачи подходит JSON Web Tokens (JWT). JWT - это компактный, URL-безопасный формат для передачи данных между сторонами в виде JSON-объекта, который включает в себя полезную нагрузку (payload), подписанную или зашифрованную для обеспечения безопасности.</p>
10 <p>Для решения этой задачи подходит JSON Web Tokens (JWT). JWT - это компактный, URL-безопасный формат для передачи данных между сторонами в виде JSON-объекта, который включает в себя полезную нагрузку (payload), подписанную или зашифрованную для обеспечения безопасности.</p>
11 <p>При использовании JWT права доступа пользователя могут быть закодированы внутрь токена, который затем передается клиенту. Этот токен включает в себя всю необходимую информацию для авторизации, и сервисы могут проверять его подлинность и содержание без необходимости обращаться к базе данных или серверу авторизации. Это дает ряд преимуществ:</p>
11 <p>При использовании JWT права доступа пользователя могут быть закодированы внутрь токена, который затем передается клиенту. Этот токен включает в себя всю необходимую информацию для авторизации, и сервисы могут проверять его подлинность и содержание без необходимости обращаться к базе данных или серверу авторизации. Это дает ряд преимуществ:</p>
12 <ul><li><strong>Автономность:</strong>Сервисы могут проверять права пользователя без необходимости отправлять дополнительные запросы на сервер.</li>
12 <ul><li><strong>Автономность:</strong>Сервисы могут проверять права пользователя без необходимости отправлять дополнительные запросы на сервер.</li>
13 <li><strong>Снижение нагрузки:</strong>Снижается нагрузка на центральный сервер авторизации, так как проверка прав может происходить локально на стороне сервиса.</li>
13 <li><strong>Снижение нагрузки:</strong>Снижается нагрузка на центральный сервер авторизации, так как проверка прав может происходить локально на стороне сервиса.</li>
14 </ul><p>JWT активно используются в системах единой авторизации SSO. Это подход, при котором для доступа ко всем сервисам системы достаточно авторизоваться ровно один раз, в специально предназначенном для этого сервисе.</p>
14 </ul><p>JWT активно используются в системах единой авторизации SSO. Это подход, при котором для доступа ко всем сервисам системы достаточно авторизоваться ровно один раз, в специально предназначенном для этого сервисе.</p>
15 <p>Работает это так. Пользователь проходит аутентификацию один раз, после чего ему выдается JWT, содержащий информацию о его правах доступа. Этот токен передается между различными сервисами, и каждый сервис может локально проверять его подлинность и права пользователя без необходимости обращаться к центральному серверу.</p>
15 <p>Работает это так. Пользователь проходит аутентификацию один раз, после чего ему выдается JWT, содержащий информацию о его правах доступа. Этот токен передается между различными сервисами, и каждый сервис может локально проверять его подлинность и права пользователя без необходимости обращаться к центральному серверу.</p>
16 <p>В большинстве случаев для передачи токена используется, уже знакомый нам, Bearer механизм, где токен передается в заголовке:</p>
16 <p>В большинстве случаев для передачи токена используется, уже знакомый нам, Bearer механизм, где токен передается в заголовке:</p>
17 <p>Пример запроса с заголовком:</p>
17 <p>Пример запроса с заголовком:</p>
18  
18