2016-06-24 5 views
0

У меня есть проект MVC, который позволяет моим пользователям добавлять пользователей и роли в таблицы AspNetRoles и AspNetUsers. Приложение использует Active Directory для аутентификации пользователей в представлении входа. В моей базе данных я добавил пользователя user123 к роли Administrators, в моей базе данных. Я добавил следующую логику, чтобы сделать эту ссылку видимой для роли Administrators в моей частичной регистрации.Как выполнить проверку подлинности в отношении пользователей и ролей ASPNET, хранящихся в моей базе данных?

@if (Roles.IsUserInRole("Administrators")) 
{ 
    @Html.ActionLink("Manage Accounts", "Index", "Roles") 
} 

Я также добавил это в свой web.config, чтобы создать экземпляр соединения поставщика роли с базой данных.

<roleManager enabled="true"> 
    <providers> 
    <clear /> 
    <add connectionStringName="DefaultConnection" 
     name="AspNetSqlRoleProvider" 
     type="System.Web.Security.SqlRoleProvider" 
     applicationName="MyApplicationName" /> 
    </providers> 
</roleManager> 

Однако моя ссылка все еще невидимы для user123, которые в соответствии с моей базе данных является членом Administrators. Какова причина этого?

ответ

1

Вы одновременно смешиваете Identity, членство в ASP.NET и Windows Auth, все из которых по своей сути несовместимы друг с другом. Если вы используете Identity, поставщики ролей и т. Д. Находятся вне окна. Все это часть членства ASP.NET, которая заменяется Identity. Windows Auth также является совершенно другим зверем и не работает с индивидуальной аутентификацией, предоставляемой Identity или ASP.NET Membership.

Если вы хотите использовать собственную систему аутентификации и, которую хотите пройти аутентификацию через AD, тогда вы не можете использовать Windows Auth. Вместо этого вы должны вручную подключиться к AD через LDAP и запустить свое разрешение против этого. Вам все равно понадобятся фактические пользовательские записи в вашей системе, предоставленные Identity (поскольку никто не должен использовать членство ASP.NET больше), но вы не будете использовать Identity для фактической проверки комбинации user/password. Вместо этого вы будете делать это через LDAP, а затем просто подпишите пользователя на стороне Identity.

+0

Крис, я аутентифицируюсь через LDAP. Я вхожу в мое приложение через учетные данные AD, и он может проверить, действительно ли имя пользователя и пароль. В моей частичной части входа используется идентификатор. Я считаю, что мой поставщик ролей настроен неправильно. Однако это первый случай, когда я попытался сделать что-то подобное, и я довольно новичок в MVC. – Skullomania

+0

Я могу гарантировать, что ваш поставщик ролей настроен неправильно, потому что Identity не использует поставщиков ролей. –

+0

ok ... Когда я удаляю строку из webconfig, как получить приложение для аутентификации с использованием ролей в базе данных? – Skullomania