3

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

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

ответ

7

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

Адрес a link that might help.

+0

Очень интересная ссылка, спасибо Ричард. –

2

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

Авторизовать использует метод 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; 
     } 
    } 
} 
+0

Спасибо, я отдам! –

 Смежные вопросы

  • Нет связанных вопросов^_^