У меня есть небольшой проект, построенный с использованием Visual Studio 2013, .NET 4.5, MVC 5 и EF 6. Я создал его с помощью проверки подлинности Windows, но теперь мне нужно проверить членство в Active Группа каталогов, чтобы разрешить или запретить доступ.Аутентификация Windows с группами Active Directory
Я спустил много ОЧЕНЬ глубоких отверстий кролика, пытаясь выяснить, как это сделать. Сначала я предположил, что мне нужно будет изменить проект, чтобы использовать аутентификацию «On-Premises». Тем не менее, я обнаружил, что:
- В VS 2013, по-видимому, нет способа изменить тип аутентификации, используемой проектом (кроме редактирования вручную некоторых файлов).
- В документации еще нет объяснений, как настроить аутентификацию «On-Premises». (Действительно? Как это возможно?)
- В любом случае мне не нужна аутентификация «On-Premises», так как это просто для служб Windows Identity Federation (или что-то в этом роде). Вместо этого я использую только проверку подлинности Windows с ролями ASP.Net, которые, по-видимому, получают Windows из групп Active Directory при входе в систему.
Таким образом, если предположить, что # 3, правда, я пытался чтения многочисленные сообщения об этом, но они, кажется, делятся на две основные группы:
- прямолинейно, простые методы, которые я не могу получить работать, вероятно, потому, что он предполагает некоторые знания, которых у меня нет.
- Комплексные, настраиваемые методы, которые, как я подозреваю, делают с помощью кода, что, возможно, можно сделать в методе без кода.
Предполагая, что # 1 - это путь, вот моя последняя попытка.
В мой контроллер, у меня есть:
[Authorize([email protected]"SomeDomain\\SomeGroup")]
public class SomeController : Controller
В моем файле Web.config, у меня есть:
<system.web>
<authentication mode="Windows" />
<authorization>
<deny users="?" />
</authorization>
<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider">
<providers>
<clear/>
<add name="AspNetWindowsTokenRoleProvider"
type="System.Web.Security.WindowsTokenRoleProvider"
applicationName="/" />
</providers>
</roleManager>
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="BehaviorConfiguration">
<serviceAuthorization
principalPermissionMode="UseAspNetRoles"
roleProviderName="AspNetWindowsTokenRoleProvider" />
<serviceMetadata />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
При попытке открыть страницу, я вместо этого предложено войти. После ввода моего идентификатора входа и пароля я продолжаю получать приглашение для входа. Мне не разрешено попасть на страницу.
У меня нет нигде, где бы я ни говорила о моем приложении, где находится сервер Active Directory, но впечатление, которое я получаю, это то, что Windows уже знает это (поскольку, когда я вхожу в Windows, он обращается к серверу Active Directory для проверки подлинности меня).
Я что-то упустил? Или я ошибаюсь, полагая, что это можно сделать без написания собственного кода?
Предостережение: Я довольно новичок в .NET, MVC и т. Д., Исходя из Java-мира, поэтому, пожалуйста, используйте небольшие слова. :-)
Вы должны проверить этот вопрос. Вероятно, для более ранней версии mvc, но проверка подлинности Windows не изменилась за какое-то время. http://stackoverflow.com/questions/13767439/using-windows-authentication-with-active-directory-groups-as-roles – Shoe
Я уже смотрел этот пост и основывался на большинстве своих попыток, но он не работал. Однако я только что понял, что я сделал не так. В атрибуте моего контроллера у меня было 2 обратных слэша между именем домена и именем роли, а не одним. Так что у меня было: '[Авторизоваться (Roles = @ "\\ SomeDomain SomeGroup")]' вместо '[Авторизоваться (Roles = @ "SomeDomain \ SomeGroup")]' Doh! –