Авторизация пользователей из 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 выставляет правильные требования? Взгляните на рабочий комплект авторизации претензий.
Проблема, которая также может помочь: объявление Azure возвращает роли в утверждениях, но User.IsInRole возвращает false