Службы проверки подлинности Windows и членства в SQL - PullRequest
3 голосов
/ 20 мая 2009

У меня есть сайт интрасети ASP.Net MVC, который использует проверку подлинности Windows, чтобы узнать, кто вошел в систему (не разрешен просмотр). В первый раз, когда пользователи посещают, я собираю некоторую основную информацию от них для их объекта Contact (например, имя, адрес электронной почты, страна), которая затем сохраняется в базе данных приложений.

Я хочу сделать роль сайта основанной, поэтому мне нужно иметь возможность назначать каждому пользователю роль (пользователь, администратор и т. Д.). Я мог бы сделать это с помощью групп ADS, но это кажется довольно тяжелым. Могу ли я использовать службы членства в SQL, предоставляемые ASP.Net, для хранения их имен пользователей, а затем ролей, к которым они принадлежат, или я буду вынужден собирать пароли и т. Д. (Отказ от использования аутентификации Windows)? Также это интегрируется с атрибутом ASP.Net MVC [Authorize]?

Ответы [ 2 ]

7 голосов
/ 20 мая 2009

В «нормальном» ASP.NET, безусловно, можно использовать эту комбинацию (проверка подлинности Windows и SQL для ролей), поэтому это должно быть возможно и для MVC.

Вот ссылка, которая может помочь .

2 голосов
/ 20 мая 2009

Да, вы можете сделать это.

Authorize использует метод IsInRole IPrincipal, чтобы определить, находится ли пользователь в данной роли.

Вы можете отключить реализацию IPrincipal по умолчанию во время события AuthenticateRequest в Global.asax с вашей реализацией, которая обрабатывает это по-вашему.

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

private void Application_AuthenticateRequest(object sender, EventArgs e)
{
    if (!Request.IsAuthenticated)
    {
        Context.User = new MyPrincipal { Identity = new MyIdentity 
                { Type = UserType.Inactive, Id = int.MinValue }};
        Thread.CurrentPrincipal = Context.User;
    }
    else
    {
        HttpCookie authCookie = Request.Cookies[
            FormsAuthentication.FormsCookieName];
        if (authCookie != null)
        {
            FormsAuthenticationTicket authTicket =
                   FormsAuthentication.Decrypt(authCookie.Value);

            var identity = Db.GetIdentity(
              authTicket.Name, new HttpRequestWrapper(Request));
        Context.User = new MyPrincipal { Identity = new MyIdentity 
                { Type = UserType.Inactive, Id = int.MinValue }};
        Thread.CurrentPrincipal = Context.User;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...