Аутентификация Active Directory в ASP.NET MVC - PullRequest
4 голосов
/ 09 апреля 2011

У меня есть несколько таблиц в моей базе данных, которые указывают, что пользователи-ведьмы (в зависимости от вашего имени пользователя AD) могут фактически использовать текущее приложение ASP.NET MVC 2, которое я создаю.

Мой вопрос заключается в том, как (или, более вероятно, где и где я могу это разместить? На главной странице ??) я пишу метод, который выводит пользователя AD из контекста HTTP и проверяет его по базе данных, чтобы увидеть вы действительно можете использовать приложение? Если вы можете ... идея в том, чтобы написать пару ключей в объекте Session с необходимой мне информацией (роль, полное имя и т. Д.).

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

Есть мысли?

Редактировать: Имейте в виду, что я не хочу аутентифицировать пользователя через форму. Все, что я хочу проверить - можете ли вы использовать мое приложение в соответствии с моей базой данных и вашим именем пользователя AD. Если вы можете написать на сессию, чтобы погибнуть информация, которая мне нужна. В противном случае просто выбросить страницу с ошибкой.

Это то, что я реализовал до сих пор, это путь? Для чего второй метод? (Извините, я немного новичок в c #) То, что я хочу сделать, это на самом деле бросить представление, если вы не авторизованы ...

protected override bool AuthorizeCore(HttpContextBase httpContext)
{
  var isAuthorized = base.AuthorizeCore(httpContext);
  if (isAuthorized)
  {
    var canUse = this._userRepo.CanUserUseApp(httpContext.User.Identity.Name);
    if (!canUse)
    {
      isAuthorized = false;
    }
  }
  return isAuthorized;
} 

Ответы [ 2 ]

4 голосов
/ 09 апреля 2011

Вы можете активировать и использовать проверку подлинности Windows (NTLM) , а затем написать собственный атрибут [Authorize], где вы можете получить подключенного в данный момент пользователя AD и выполнить дополнительную проверку того, авторизован он или нет. использовать приложение против вашего хранилища данных. Затем вы можете украсить контроллеры / действия, требующие авторизации, с помощью этого пользовательского атрибута.


UPDATE:

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

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var isAuthorized = base.AuthorizeCore(httpContext);
        if (isAuthorized)
        {
            // The user is authorized so far => check his credentials against
            // the custom data store 
            return IsUserAllowedAccess(httpContext.User.Identity.Name);
        }
        return isAuthorized;
    }

    private bool IsUserAllowedAccess(string username)
    {
        throw new NotImplementedException();
    }
}

и затем:

[MyAuthorize]
public class FooController: Controller
{
    public ActionResult Index()
    {
        ...
    }
}
0 голосов
/ 13 сентября 2011

Создайте класс с именем AdminAttribute с этим кодом


 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
    public class AdminsAttribute : AuthorizeAttribute
    {
            public AdminsAttribute() 
            {
                this.Roles = "MSH\\GRP_Level1,MSH\\Grp_Level2"; 
            }
    } 


 public class HomeController : Controller
    {
        [Admins] 
        public ActionResult Level1()
        {
            ViewBag.Message = "Welcome to ASP.NET MVC!";


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