Авторизация пользователей из 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)


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

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

Затем назначьте им пользователей. После того, как вы сделаете эти две вещи, в полученном вами JWT появится утверждение, называемое «ролями», которое содержит роль (роли) пользователя.

person juunas    schedule 27.09.2017
comment
Что ж, это крутая статья, которая не совсем подходит для ASP:NET MVC Core 2.0. - person Ron16; 28.09.2017

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

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

--

введите здесь описание изображения

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

  • 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 свойства пользователя используется для проверки, содержит ли она утверждение соответствующей группы.

person Ron16    schedule 05.10.2017

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

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

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

person mbnx    schedule 27.09.2017