Общие сведения об управлении доступом на основе ролей (RBAC)

Общие сведения об управлении доступом на основе ролей (RBAC)

3 ноября 2022 г.

командой Supertokens

Управление доступом на основе ролей (RBAC) — это подход к обеспечению безопасности, в котором роли используются для определения того, что пользователю разрешено делать, а что нет. В системе RBAC пользователям назначаются роли с различными разрешениями для разных ресурсов, включая файлы, базы данных и приложения.

Таким образом, когда пользователь пытается получить доступ к ресурсу, система сначала находит роли, связанные с пользователем, а затем проверяет, есть ли у какой-либо из ролей соответствующее разрешение. Если это так, пользователю разрешен доступ к ресурсу. В противном случае пользователю будет отказано в доступе.

В нашем примере мы создадим образец приложения для ведения блога.

Во-первых, у нас есть роль regular-user. Мы хотим разрешить обычным пользователям читать все сообщения в блогах, но только редактировать или удалять сообщения, созданные ими.

С другой стороны, мы создаем роль admin, которая позволяет admin создавать, редактировать и удалять все сообщения в блогах.

Таким образом, если пользователь только с ролью regular-user попытается отредактировать сообщение в блоге другого пользователя, наша система увидит, что роль regular-user не имеет разрешение редактировать эту запись в блоге и отклонить запрос.

RBAC или ABAC?


Управление доступом на основе атрибутов (ABAC) — это еще один подход, при котором разрешения назначаются на основе атрибутов пользователя, атрибутов ресурсов и атрибутов среды. Например, доступ к файлу дизайна может быть разрешен только пользователям, у которых в заголовке есть слово "дизайнер", и доступ к которым осуществляется в рабочие дни.

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

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

При использовании ABAC компании должны сначала определить переменные и настроить различные правила на основе атрибутов, что может оказаться трудоемким процессом.

RBAC vs ABAC

Преимущества RBAC


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

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

* Улучшение соответствия. Использование RBAC заставляет разработчиков думать и организовывать разрешения приложений и контроль доступа. Затем эта информация может быть использована ответственными за соблюдение нормативных требований во время проверок.

* Снижение риска утечки/утечки данных: разработчикам становится проще внедрять передовые методы обеспечения безопасности приложений в отношении контроля доступа к своим API, что значительно снижает вероятность нарушений.

Недостатки RBAC

* Сложно делать исключения: может быть сложно сделать исключения в том, как работает роль. В нашем примере выше, если мы хотим добавить правило, согласно которому пользователи с ролью regular-user не могут редактировать свои собственные сообщения, если они уже внесли десять правок, его нужно будет добавить в логику API как исключение. Система ролей/разрешений не может легко выразить это. Это вызывает проблемы, так как мы должны кодировать это правило во всех местах, где мы проверяем разрешение edit:self.

* Рост роли: поскольку единственный способ добавить детализацию в систему RBAC — это создать новую роль, мы можем получить сотни разных ролей, которыми невозможно управлять.

* Может вызвать конфликты разрешений: могут возникнуть ситуации, когда пользователю назначены две роли с противоречивой информацией. В нашем примере выше, если пользователю назначена роль admin и роль regular-user, у него есть edit:self и редактировать: все права . Какой из них должен иметь приоритет? Логика приоритета может быть закодирована в API, но это открывает возможность для ошибок.

    // only allow editing if the blog post belongs to the current user 
} 
else if (permissions.contains("edit:all")) {
    // allow editing 
}  

Это может вызвать проблемы, если у пользователя есть роли admin и regular-user — несмотря на наличие роли admin, они не смогут редактировать все блоги, потому что оператор edit:self выполняется первым, а правила edit:all пропускаются в следующем операторе else-if.

Реализация RBAC


Мы в Supertokens много думали об аутентификации и авторизации пользователей. Собственно, это все, что мы делаем. Недавно мы запустили функцию пользовательских ролей, основанную на принципах RBAC. Нашу систему аутентификации пользователей с открытым исходным кодом можно настроить всего за 45 минут!

Вы можете узнать больше о том, как использовать роли пользователей и функции разрешений с помощью SuperToken, из руководств по рецептам.

Написано людьми на SuperTokens — надеюсь, вам понравилось! Мы всегда доступны на нашем сервере Discord. Присоединяйтесь к нам, если у вас есть вопросы или вам нужна помощь.

:::информация Также опубликовано здесь.

:::


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE