У меня есть приложение ASP.NET MVC5, в котором я не использую проверку подлинности Windows.
Все работало нормально, пока я не попытался запустить приложение за пределами домена, в котором оно разрабатывалось, и (по какой-либо причине) получило:
The trust relationship between this workstation and the primary domain failed.
когда я пытаюсь сделать User.IsInRole("Admin")
.
Я использую пользовательские Identity
, Role
, IdentityStore
, RoleStore
и т.д. Из.NET Identity
и вижу, что данные о пользователях и RoleStore
правильно извлекаются из базы данных (MongoDB).
Есть много вопросов по этой проблеме, но они от людей, которые хотят использовать Windows Auth. и олицетворение в своих приложениях MVC:
-
Как настроить Аутентификацию/Олицетворение Windows + IIS 7 + MVC
-
Не удалось установить доверительные отношения между основным доменом и доверенным доменом
-
My.User.IsInRole("имя роли") выдает ошибку доверительных отношений в Windows 7
Так почему именно я получаю это SystemException
если я не использую Active Directory и (насколько я знаю) не делаю ничего, что может зависеть от домена ПК? Я что-то пропустил (в моем файле Web.config
или IIS Express)?
РЕДАКТИРОВАТЬ:
Хорошо, так что немного сузить
Моя строка User.IsInRole("Admin")
находится внутри оператора if()
в моем _Layout.cshtml
View (т. _Layout.cshtml
Чтобы узнать, что показывать в панели навигации в зависимости от роли).
Теперь я знаю, что я получаю ошибку только выше, когда ни один пользователь не аутентифицирован, и я не в домене, который использовал для dev. Если я помещу точку останова в эту строку, я смогу увидеть, что объект User
является System.Security.Principal.WindowsIdentity
а его базовый Identity
- System.Security.Principal.WindowsIdentity
.
С другой стороны, если пользователь проходит проверку подлинности, то объектом User
и ts Identity
являются System.Security.Claims.ClaimsPrincipal
и System.Security.Claims.ClaimsIdentity
.
Почему он вообще использует Windows Identity (если он не прошел проверку подлинности) и как его отключить?