Проверка членства в группе Azure Active Directory через MSAL в API-интерфейсах SPA + Web - PullRequest
1 голос
/ 23 октября 2019

Я создаю приложение, у которого есть внешний интерфейс (SPA, созданный с помощью Vue.js), который взаимодействует с парой основанных на json Web API в серверной части (размещенной в Azure). Веб-API должны быть защищены с помощью Azure Active Directory, а пользователи должны быть членами группы безопасности. Кроме того, SPA должен просто попытаться заставить пользователя войти в утвержденную учетную запись, если он не вошел в систему как одна (то есть просто с автоматическим перенаправлением).

У меня фактически все это работает. Приложение AAD имеет Group.Read.All, пользователь входит через SPA и дает согласие, и SPA вызывает getMemberGroups. Кроме того, веб-API могут проверять токен доступа, предоставленный SPA, и веб-API, к сожалению, также должны вызывать getMemberGroups.

И я думаю, что это моя проблема. Веб-API продолжают вызывать getMemberGroups, чтобы заблокировать его. Если бы я выполнял аутентификацию на сервисе, я мог бы потенциально вернуть маркер доступа только после проверки групп членства. Но затем я теряю простую модель входа MSAL в SPA - веб-API на самом деле не предоставляют никакого внешнего интерфейса, SPA статически размещается.

Насколько я могу судить, я не могу получить AzureActive Directory для создания токена гарантированно содержит определенные групповые заявки. Я думаю, что это решило бы мою проблему.

Может кто-нибудь предложить несколько советов о том, как лучше всего разработать модель аутентификации в среде SPA + Web API? Или метод, который я выбрал, единственный способ сделать это?

Спасибо!

1 Ответ

0 голосов
/ 24 октября 2019

Вы можете включить претензию Группы в свой токен, как указано здесь . Вам просто нужно изменить поле "groupMembershipClaims" в манифесте приложения:

"groupMembershipClaims": "SecurityGroup"

Тогда токен будет содержать идентификаторы групп, к которым относится использование, как показано ниже:

{
  "groups": ["1ce9c55a-9826-4e32-871c-a8488144bb32"]
}

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

{
  "roles": ["admin"]
}

Затем вы сможете реализовать свою логику авторизации на основе ролей пользователя.

Подробнее см. https://joonasw.net/view/using-groups-vs-using-app-roles-in-azure-ad-apps и https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-add-app-roles-in-azure-ad-apps

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...