У меня есть небольшой проект, построенный с использованием Visual Studio 2013,.NET 4.5, MVC 5 и EF 6. Я создал его с помощью проверки подлинности 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-мира, поэтому, пожалуйста, используйте небольшие слова.: -)