Членство в ASP.NET. Какой RoleProvider использовать, чтобы User.IsInRole() проверял группы ActiveDirectory?
-
21-08-2019 - |
Вопрос
На самом деле очень простой вопрос:
В настоящее время у меня отключен анонимный доступ к IIS, пользователи автоматически входят в систему, используя свою учетную запись Windows.Однако вызов User.IsInRole("Имя роли") возвращает false.Я дважды проверил User.Identity.Name() и «Имя роли», и он должен вернуть true.
В настоящее время у меня есть это в моем Web.Config:
ОБНОВЛЯТЬ
Я вызывал User.IsInRole("Имя роли"), где я должен был вызвать User.IsInRole("DOMAIN
ole name")
Однако мне все же хотелось бы знать, нужна ли вообще запись <membership>?
Что мне следует изменить?(и нужна ли вообще запись <membership>?)
<authentication mode="Windows">
<forms
name=".ADAuthCookie"
timeout="10" />
</authentication>
<membership defaultProvider="ADMembershipProvider">
<providers>
<clear/>
<add
name="ADMembershipProvider"
type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="ADConnectionString"
connectionUsername="XXX\specialAdUser"
connectionPassword="xx"
/>
</providers>
</membership>
<roleManager enabled="true" defaultProvider="WindowsProvider">
<providers>
<clear />
<add name="WindowsProvider" type="System.Web.Security.WindowsTokenRoleProvider" />
</providers>
</roleManager>
Решение
Если вы используете аутентификацию Windows, IsInRole будет работать без дополнительной настройки, если вы не забудете добавить к роли префикс домена, т.е.ДОМЕН\имя группы.
Кроме того, вы можете использовать свою собственную роль (каламбур) и использовать аутентификацию Windows, например, для поставщика ролей SQL, если вы не хотите, чтобы ваш AD был засорен настраиваемыми ролями для вашего приложения.
Так что нет, вам вообще не нужна конфигурация провайдера.
Другие советы
Поставщик членства здесь не поможет.ActiveDirectoryMembershipProvider кажется, лучше всего (только?) подходит для аутентификации с помощью форм.
BlogEngine.NET имеет Поставщик ролей Active Directory.
Почти уверен, что единственное, что вам нужно, это группа roleManager (вместе с настройкой базового режима аутентификации = 'windows')
В стандартной комплектации нет поставщика ролей для прямого использования Active Directory.Вы можете использовать таблицу ролей в системе членства и ролей ASP.NET или диспетчер авторизации (AzMan).
Есть статья о КодПроект который показывает реализацию поставщика ролей, работающего с Active Directory, с полным исходным кодом.Может быть, это поможет?
Марк