Правильная стратегия авторизации с использованием Azure AD для защиты API интерфейса командной строки от REST - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь внедрить средства защиты в инструмент CLI бэк-офиса (NodeJS), который вызывает API REST (Java / JAX-RS) для выполнения операций с базой данных и т. Д. Поскольку мы используем Azure AD для всех наших учетных записей, я хотел бы использовать его для аутентификации наших пользователей, а также для авторизации.

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

Мне удалось создать два приложения в Azure AD, одно для CLI и одно для API. Я могу войти в систему, используя наши учетные данные AD, получить токены доступа для идентификатора приложения CLI, запрашивающего возобновление API REST. На стороне клиента я использую https://www.npmjs.com/package/simple-oauth2. Со стороны Java токены проверяются на наличие открытых ключей Microsoft, так что, кажется, все работает нормально.

Но как мне заблокировать пользователей на роли оператора или администратора? Один наивный способ, который я могу придумать, - это иметь корреляцию между пользователем и ролью в REST API и использовать только поток OAuth для аутентификации пользователя. Но я полагаю, для этого и есть AD ... Могут ли в этом случае помочь области OAuth? Или REST API должен вызвать AD для запроса членства в группах пользователей, как только он получит токены доступа и узнает личность конечного пользователя?

Заранее спасибо!

1 Ответ

1 голос
/ 14 марта 2019

Используйте Роли приложения .

Здесь вы найдете хорошее описание ролей приложений и способов их обработки:

https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-add-app-roles-in-azure-ad-apps

Рекомендованные ресурсы в конце, а также очень полезны и помогут вам в этом процессе.

Кроме того, при разработке CLI рекомендуется использовать описанный здесь поток устройств - с примером кода (.net core) здесь .

...