Авторизация пользователей из Azure Active Directory

Я настроил основной проект ASP.NET MVC, и при создании проекта я выбрал опцию аутентификации Azure AD. Я добавил двух пользователей в Azure AD по умолчанию. Один в роли Справочника "Глобальный администратор", а другой в роли Справочника "Пользователь". [См. Рис. Ниже для примера глобального администратора]

] 1

Теперь аутентификация работает нормально. Оба из этих двух применений могут идеально войти в WebApp. Что не работает, так это использование авторизации для отдельных разрешений / представлений для отдельных пользователей. В контроллере дома я пытаюсь сделать что-то вроде:

if(User.IsInRole('Admin')
 return View("HomePageAdmin");
else
 return View("NormalHomePage");

Тем не менее, это не работает. Для обоих пользователей он перенаправляет на один и тот же "NormalHomePage".

Что мне не хватает?

3 ответа

Решение

Итак, после долгих поисков и поисков способ реализации AuthN через AAD для ASP.NET Core 2.0 оказался довольно простым.

  • Мне нужно было создать новую группу в AAD, дать ей имя (в моем случае "ShopAdmin"), а затем просто добавить пользователей, которым я хотел дать права администратора.
  • Откройте файл описания веб-приложения, обновите поле "groupMembershipClaims" с нуля до "SecurityGroup"
  • Снова откройте группу из AAD и скопируйте оттуда идентификатор объекта. Этот ID ОБЪЕКТА мы будем использовать в коде C# контроллеров.

-

  • Итак, теперь, когда мы создали требуемую группу (или группы, в зависимости от ваших потребностей), обновили файл манифеста WebApp из AAD, скопировали OBJECT ID группы, теперь пришло время просто использовать этот OBJECT ID в контроллере. В моем случае это просто делается с помощью:

  • public bool CheckIfAdmin() { if (User.Claims.FirstOrDefault(c => c.Type == "groups" && c.Value.Equals("42f51be8-28c4-995d-a69f-f6f42f96a5cd", StringComparison.CurrentCultureIgnoreCase)) != null) return true; else return false; }

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

Роли Azure AD не совпадают с ролями в вашем приложении. Вы, вероятно, должны взглянуть на этот пример: https://github.com/Azure-Samples/active-directory-dotnet-webapp-roleclaims

Сначала вам нужно определить роли в вашем приложении в манифесте приложения.

Затем назначьте им пользователей. Как только вы сделаете эти две вещи, в получаемой вами JWT будет заявка, называемая "роли", которая содержит роли пользователя.

Трудно сказать без дополнительной информации. Ваш JWT выставляет правильные требования? Взгляните на рабочий комплект авторизации претензий.

https://github.com/Azure-Samples/active-directory-dotnet-webapp-roleclaims/blob/master/WebApp-RoleClaims-DotNet/App_Start/Startup.Auth.cs

Проблема, которая также может помочь: объявление Azure возвращает роли в утверждениях, но User.IsInRole возвращает false

Другие вопросы по тегам