"MVC5身份验证中的...与主域之间的信任关系失败"

use*_*392 29 asp.net asp.net-mvc asp.net-mvc-5 asp.net-identity

我有一个ASP .NET MVC5应用程序,我没有使用Windows身份验证.

一切都工作正常,直到我尝试在开发它的域之外运行应用程序,并且(无论出于何种原因)得到了:

The trust relationship between this workstation and the primary domain failed.
Run Code Online (Sandbox Code Playgroud)

当我想要做的时候User.IsInRole("Admin").

我使用自定义的Identity,Role,IdentityStore,RoleStore,等从.NET的Identity,我可以看到用户和角色数据被从(MongoDB的)数据库中检索正确.

关于这个问题有很多问题,但是他们来自想要使用Windows Auth的人.和模仿他们的MVC应用程序:

那么,SystemException如果我没有使用Active Directory并且(据我所知)没有做任何可能取决于PC域的事情,我为什么要得到这个呢?我错过了一些配置(在我的Web.config或IIS Express中)?

编辑:

好的,所以缩小了一点......

我的User.IsInRole("Admin")行在if()我的_Layout.cshtml视图中的一个声明中(即,知道在导航栏中显示什么,取决于角色).

我现在知道在没有用户进行身份验证时我只得到上面的错误,而且我不在我用于dev的域中.如果我在该行上放置一个断点,我可以看到该User对象是a System.Security.Principal.WindowsIdentity,它的底层IdentitySystem.Security.Principal.WindowsIdentity.

另一方面,如果用户被认证,则User对象和ts IdentitySystem.Security.Claims.ClaimsPrincipalSystem.Security.Claims.ClaimsIdentity.

为什么它根本使用Windows身份(未经身份验证时)以及如何禁用它?

use*_*392 30

所以,基于我的编辑,我已经修改了我_Layout.cshtml,而不是

@if(User.IsInRole("Admin"))  {...}
Run Code Online (Sandbox Code Playgroud)

我有

@if(User.Identity.IsAuthenticated && User.IsInRole("Admin")) {...}
Run Code Online (Sandbox Code Playgroud)

这似乎解决了这个问题.

我认为问题是当没有用户进行身份验证时ASP .NET Identity使用WindowsIdentity,当我尝试检查User.IsInRole时,它会尝试检查WindowsIdentity对我没有的Active Directory的角色.很显然,我应该先检查是否在用户试图检查其角色之前,即使登录了,所以认错.

但是,即使上面的更改似乎修复了我的代码,我也非常有兴趣了解更多有关此行为的信息:为什么System.Security.Principal.WindowsIdentity在没有用户通过身份验证时使用空.我会接受任何解释这个问题的答案.


Dav*_*ney 6

我遇到了这个问题-如果我测试了一个不存在的活动目录组,它对我来说就失败了。

确保您使用的是已存在的组!