MVC3 авторизация с использованием AD - PullRequest
4 голосов
/ 23 мая 2011

Можно ли авторизовать / запретить пользователям приложения MVC3 с помощью AD?

На данный момент мое приложение защищено с помощью аутентификации Windows, но это означает добавление пользователей в группы на сервере Win2007.

Я хотел бы изменить это так, чтобы пользователям было разрешено / отказано в доступе к приложению / и действиям / представлению контроллера вместо их ролей AD, чтобы они либо автоматически входили в систему (например, аутентификация Windows), либо перенаправлялисьна страницу «отказано».

Любая помощь очень с благодарностью принята ... все, что я нахожу, похоже, основано на группах Windows или формах аутентификации.

Ответы [ 3 ]

4 голосов
/ 23 мая 2011

Вы можете использовать свойство Roles:

[Authorize(Roles = @"SOMEDOMAIN\somegroup")]
public ActionResult Foo()
{
    ...
}

Вот учебник , который объясняет шаги.

2 голосов
/ 23 мая 2011

Просто используйте членскую базу , которая встроена в Asp.net.Вы обнаружите, что уже существует ActiveDirectoryMembershipProvider из коробки, но вам придется реализовать RoleProvider самостоятельно, поскольку членство может быть определено различными способами в разных сетях.

2 голосов
/ 23 мая 2011

Я использую группы AD для своего приложения в интрасети.

<authentication mode="Windows" />
<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider">
  <providers>
    <clear />
    <add applicationName="/" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </providers>
</roleManager>

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

[Authorize(Roles = MyNamesspace.Constants.MANAGER_GROUP)]
public ActionResult Blah() {...

И вдля просмотра вы можете использовать User.IsInRole и имя их группы AD / Windows.

Или получить список ролей, которые веб-сервер видит от этого пользователя: System.Web.Security.Roles.GetRolesForUser();

Предупреждение: мой сервери все мои клиенты находятся в одном домене.это не сработает, если вам нужно сделать то же самое для веб-клиентов вне сайта с вашей ActiveDirectory.

...