У меня есть проект 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. Какова причина этого?

0
Skullomania 24 Июн 2016 в 20:12

1 ответ

Лучший ответ

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

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

1
Chris Pratt 24 Июн 2016 в 20:44
Крис, я аутентифицируюсь через LDAP. Я вхожу в свое приложение с помощью учетных данных AD, и оно может видеть, действительны ли имя пользователя и пароль. МОЙ частичный вход в систему использует удостоверение. Я думаю, что мой поставщик ролей настроен неправильно. Однако я впервые попытался сделать что-то подобное, и я новичок в MVC.
 – 
Skullomania
24 Июн 2016 в 20:52
Я могу гарантировать, что ваш поставщик ролей настроен неправильно, потому что Identity не использует поставщиков ролей.
 – 
Chris Pratt
24 Июн 2016 в 21:01
Хорошо ... Когда я удаляю строку из webconfig, как мне заставить приложение аутентифицироваться с использованием ролей в базе данных?
 – 
Skullomania
24 Июн 2016 в 21:03
Первоначально у меня не было поставщика ролей в web.config, но моя часть входа в систему не видит, что мой зарегистрированный пользователь находится в группе администраторов
 – 
Skullomania
24 Июн 2016 в 21:07