Блоги

Навигационные полоски

Ролевая модель в WSO2 API Manager

Продукт для управления API предприятия от компании WSO2 функционально является самым продвинутым по сравнению с аналогами. В этой небольшой статье я хотел бы остановиться более подробно на ролевой модели WSO2 API Manager. 

Ролевая модель WSO2 API Manager, как и всех продуктов вендора, строится на ролях и наборах разрешений (permission). Управление ролями, разрешениями и пользователями происходит в панели управления Carbon. Если мы используем отдельный WSO2 Identity Server, то всё управление этими сущностями строится через него. В данной статье описан именно этот случай.

Наборы разрешений отличаются между продуктами. В WSO2 Identity Server определён общий набор разрешений, одинаковый для всех продуктов WSO2.

Для данной статьи в WSO2 Identity Server были созданы 5 пользователей с различным набором ролей и разрешений:

Пользователи с префиксом api-* используются для создания, публикации и доступа в магазин API. Пользователи с префиксом phone-* служат для вызовов различных методов API. Роли для последних двух пользователей создаются прямо в WSO2 Identity Server и не нуждаются в привязке набора разрешений - эти роли будут служить для разграничения пользователей к методам API. Роли первым трём пользователям назначаются в панеле управления WSO2 API Manager, так как они характерны только для этого продукта.

После того, как нужные пользователи и роли созданы в WSO2 Identity Server мы переходим в панель управления WSO2 API Manager. Через некоторое время, необходимое для синхронизации, пользователи и роли появятся там.

Обратите внимание на то, что все пользователи read-only - это означает, что их редактирование возможно только в WSO2 Identity Server. Пользователям с префиксом api* выданы разные роли, предопределённые в продукте:

  • Internal/creator
  • Internal/publisher
  • Internal/subscriber

Таким образом, api-subscriber может залогиниться только в магазин API, а в Publisher его не пустят. Наоборот, в магазин API не пустят api-creator и api-publisher - их роли позволяют получить доступ только в Publisher. Так работает RBAC (Role Based Access Control) для панелей управления и редактирования API.

Если рассмотреть аспект доступа к API, то к нему можно ограничить доступ как на уровне всего API, так и на уровне отдельных его методов.

Разграничение по ролям для отдельных методов делается на последнем шаге создания API. На этом шаге можно определить набор объектов Scope, в каждом из которых определить через запятую список ролей. Далее эти объекты можно назначить каждому методу:

Залогинившись пользователем с определённой ролью (в данном случае это либо PhoneVerifyWriter, либо PhoneVerifyReader) мы можем сгенерировать токен для определённого Scope и вызвать соответствующий метод API:

При попытке, используя этот токен, вызвать метод, к которому нет доступа мы получим:

<ams:fault xmlns:ams="http://wso2.org/apimanager/security">
    <ams:code>900910</ams:code>
    <ams:message>The access token does not allow you to access the requested resource</ams:message>
    <ams:description>Access failure for API: /phoneverify/1.0, version: 1.0 status: (900910) - The access token does not allow you to access the requested resource</ams:description>
</ams:fault>

В качестве резюме я могу сказать, что ролевая модель в WSO2 API Manager достаточно гибкая и позволяет разграничивать доступ на разных уровнях.

29.03.2019