Как мне пройти аутентификацию в отношении моих пользователей и ролей ASPNET, хранящихся в моей базе данных?

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

@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. Какова причина этого?


person Skullomania    schedule 24.06.2016    source источник


Ответы (1)


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

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

person Chris Pratt    schedule 24.06.2016
comment
Крис, я аутентифицируюсь через LDAP. Я вхожу в свое приложение через учетные данные AD, и оно может видеть, действительны ли имя пользователя и пароль. МОЙ частичный вход использует Identity. Я думаю, что мой поставщик ролей настроен неправильно. Однако это первый раз, когда я пытался что-то подобное, и я довольно новичок в MVC. - person Skullomania; 24.06.2016
comment
Я могу гарантировать, что ваш поставщик ролей настроен неправильно, потому что Identity не использует поставщиков ролей. - person Chris Pratt; 24.06.2016
comment
хорошо... Когда я удаляю строку из веб-конфигурации, как мне заставить приложение аутентифицироваться с использованием ролей в базе данных? - person Skullomania; 24.06.2016
comment
Первоначально у меня не было поставщика ролей в web.config, но мой частичный вход в систему не видит, что мой вошедший в систему пользователь находится в группе «Администраторы». - person Skullomania; 24.06.2016