Слово «авторизация» сложное, потому что существует широкий спектр тем, которые относятся к категории «авторизация». В этой серии мы применим практический подход к пониманию многих из этих тем с примерами, на которых можно учиться.
Ранее мы писали об аутентификации пользователя. Теперь давайте рассмотрим связанную тему, авторизацию.
Что такое Авторизация?
Авторизация — это процесс определения того, имеет ли кто-либо доступ к чему-либо. Это отличается от аутентификации, которая заключается в определении того, кем является человек.
В качестве примера представьте, что мы создаем упрощенный Twitter. Пользователи могут регистрироваться, публиковать твиты и удалять твиты. Когда мы получаем запрос на удаление твита, нам нужно сделать две вещи:
- Определить, кто сделал запрос
- Определите, разрешено ли им удалять твит.
Шаг 1 — аутентификация — мы определяем, кто пользователь. Шаг 2 — авторизация — мы определяем, разрешено ли этому пользователю удалить твит.
В этом случае шаг 2 может быть таким же простым, поскольку только пользователь, который сделал твит, может удалить его:
Шаг 2 также может включать другие правила, например, мы нанимаем команду модераторов и позволяем им также удалять твиты:
Реализация авторизации
Существует множество различных подходов к реализации авторизации. Одним из примеров, с которым вы, возможно, уже сталкивались, является управление доступом на основе ролей (RBAC). Управление доступом на основе ролей — это причудливый способ сказать «назначьте каждому пользователю роль (или группу), и каждая роль имеет определенный набор действий, которые они могут выполнять».
На самом деле мы уже рассмотрели пример RBAC выше. В нашем упрощенном примере с Twitter у нас было две роли:
1. Модераторы
2. Пользователи (мы неявно определили это как всех, кто не является модератором)
Пользователи могут создавать твиты и удалять свои твиты. Модераторы могут удалять любые твиты.
Вы можете расширить это множеством способов. Например, возможно, ваши роли иерархичны. Каждая роль имеет собственный набор разрешений, а также получает все разрешения от любой роли ниже нее в иерархии.
RBAC обычно рассматривается как более грубая форма авторизации, поскольку каждый пользователь должен принадлежать к роли, и каждый пользователь в этой роли получает одинаковые разрешения. Другим примером подхода является управление доступом на основе атрибутов (ABAC), при котором вы просматриваете атрибуты (например, в какой команде состоит пользователь, является ли это производством или промежуточным этапом и т. д.), чтобы определить, может ли пользователь выполнить какое-либо действие.
## Авторизация для бизнеса B2B
Давайте рассмотрим другой пример — построение бизнеса B2B/SaaS. В этом случае, скажем, мы делаем MVP Slack.
В бизнесе B2B пользователи будут использовать ваш продукт вместе со своими коллегами. Для этого каждый пользователь может быть членом организации.
Первое разрешение, которое нам нужно, — это возможность создать организацию, и каждому пользователю должно быть разрешено это делать. После создания организации у нас есть три иерархические роли:
1. Владелец — может удалять организацию, управлять выставлением счетов и приглашать новых владельцев
2. Администратор — может создавать новые каналы, управлять настройками организации и приглашать новых администраторов/участников
3. Член — возможность отправлять сообщения на любом канале.
Важно отметить, что эти роли применяются только в контексте организации. Я могу быть владельцем организации A и участником организации B. Эти роли определяют мои разрешения внутри организации, а не глобально.
Поскольку эти роли являются иерархическими, у администраторов есть все разрешения, которые есть у участников, а у владельцев есть все разрешения, которые есть у администраторов.
Иерархия владельцев, администраторов и участников проста и работает во многих компаниях B2B, но на практике управлять ею может быть сложно. Если вы предпочитаете, чтобы этим занимался кто-то другой, PropelAuth предоставляет эту структуру по умолчанию, включая пользовательские интерфейсы для приглашения пользователей, пользовательские интерфейсы для управления ролями и библиотеки для добавления авторизации в ваш сервер.