Pareek Rahul Ответов: 1

Как проверить пользователя с помощью имени участника службы (SSO) и предоставить доступ к базе ролей


Всем Привет,

Я абсолютно новичок в Single Sign On и Azure App Proxy.

В соответствии с этим требованием нам необходимо реализовать единый вход (используя имя участника службы) для нашего веб-портала и доступ через прокси-сервер приложения Azure, размещенный в среде Azure.

На данный момент я настроил SPN для имени хоста в среде разработки с помощью команды set spn.

Я не знаю, как идти дальше отсюда. Мне нужно аутентифицировать пользователей, использующих этот SPN (не уверен, что это возможно???). Я думаю, что мне нужно прочитать этот SPN с помощью кода C#, но как это поможет мне аутентифицировать пользователя???

Кроме того, после аутентификации пользователя мне нужно предоставить ему ролевой доступ к пунктам меню.

Любая предоставленная помощь и код будут оценены по достоинству. Пожалуйста, дайте мне знать, если потребуются какие-либо дополнительные детали.

Примечание: Я использую C# и MVC для разработки этого приложения.

Спасибо
Рахул

Что я уже пробовал:

Я попробовал ссылку ниже, но не смог выполнить это требование:
Понимание модели безопасности с использованием объектов Principal и Identity в .NET[^]

1 Ответов

Рейтинг:
2

Foothill

Принципал службы используется для сохранения информации о подключении приложения в Active Directory, чтобы приложение могло знать, к чему подключаться из любой точки вашей сети, не управляя локально сохраненными настройками. Он не используется для аутентификации или авторизации.

Чтобы выполнить аутентификацию или авторизацию в MVC, вам понадобится что-то в этом роде:

using System.DirectoryServices.AccountManagement;
namespace MyWebApp.Controllers
{
 public class MyLandingPage : Controller
 {
  public ActionResult Index()
  {
   if (!User.Identity.IsAuthenticated) // test if the user is connecting with Windows Authentication
   {
    return new RedirectToAction("AutheticationFailure", "ErrorController");
   }

   var adContext = new PricipalContext(ContextType.Domain); // this tells it use your network AD

   Pricipal user = Principal.FindByIdentity(adContext, User.Identity.Name));

   if (user == null)
   {
     // redirect to not authenticated page
   }

   GroupPrincipal group = GroupPricipal.FindByIdentity(context, "MyWebAppUserGroup"); // use the samAccountName or UPN

   if (group == null)
   {
     // redirect to OOPS page as somebody deleted your security group or you typed it wrong
   }

   if (user.IsMemberOf(group))
   {
     // at this point, user is authenticated and passed authorization check.  Okay to proceed.
   }
   else
   {
     // redirect to Not Authorized page
   }
  }
 }
}

Вам нужно будет добавить ссылку на DirectoryServices.Библиотека управления учетными записями.

***РЕДАКТИРОВАТЬ
Подождите, я просто перепутал сервисные службы с сервисными соединениями. Позвольте мне немного почитать и скорректировать код.

***РЕДАКТИРОВАНИЕ ВОЗВРАЩЕНИЕ
Если я понимаю, что вы пытаетесь сделать, вы настроили SPN, чтобы знать, где подключиться. Вы не используете SPNs для авторизации, поэтому приведенный выше код все еще остается в силе.

дополнительное очко:
Веб-приложения не имеют состояния, поэтому вам нужно будет авторизовать пользователей при каждом веб-вызове.
Для меню на основе привилегий вы можете определить разрешения пользователей и добавить их уровень разрешений в модель, которую вы передаете в представление, и использовать ее в Razor view engine для включения/исключения меню на основе отдельных пользователей.