У меня есть приложение 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 (если он не прошел проверку подлинности) и как его отключить?