我有一个ASP.NETMVC5应用程序,其中我not使用Windows身份验证.

一切正常,直到我try 在开发应用程序的域之外运行该应用程序,并且(出于任何原因)得到了一个:

The trust relationship between this workstation and the primary domain failed.

当我试着开到User.IsInRole("Admin")英里的时候.

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

关于这个问题有很多问题,但这些问题都来自于want to名使用Windows Auth的用户.以及MVC应用程序中的模拟:

那么,如果我没有使用Active Directory,而且(据我所知)没有做任何可能依赖于PC域的事情,为什么我会得到SystemException分呢?我是否缺少一些配置(在我的Web.config或IIS Express中)?

编辑:

好吧,把范围缩小一点...

我的User.IsInRole("Admin")行在我的_Layout.cshtml视图的if()语句中(也就是说,为了知道在导航中显示什么.栏,具体取决于角色).

我现在知道,只有当没有用户经过身份验证,并且我不在我用于开发的域中时,我才会出现上面的错误.如果我在这行上放置一个断点,我可以看到User对象是System.Security.Principal.WindowsIdentity,它的底层IdentitySystem.Security.Principal.WindowsIdentity.

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

它为什么要使用Windows标识(未经身份验证时),如何禁用它?

推荐答案

所以,根据我的编辑,我修改了我的_Layout.cshtml,而不是

@if(User.IsInRole("Admin"))  {...}

我有

@if(User.Identity.IsAuthenticated && User.IsInRole("Admin")) {...}

这似乎解决了问题.

我认为问题在于,当没有用户经过身份验证,并且我试图判断用户时,ASP .NET Identity使用了empty WindowsIdentity.IsInRole,然后它将try 根据我没有的Active Directory判断WindowsIdentity的角色.显然,在try 判断用户的角色之前,我应该首先判断用户是否登录,所以mea culpa.

但是,即使上面的更改似乎修复了我的代码,我还是非常有兴趣了解更多关于这种行为的信息:为什么在没有用户经过身份验证的情况下,它使用空System.Security.Principal.WindowsIdentity.我会接受任何能解释这一点的答案.

Asp.net相关问答推荐

实体框架核心:DBCommand执行得更快,但总时间要慢10倍

授权错误错误 400:C# 上的 redirect_uri_mismatch

如何在运行时判断动态数据类型的类型?

更改 GridView 中列的标题文本

无法获取项目引用的依赖项

返回 JSON 对象 (ASP.NET WebAPI)

有没有办法将 onclick 事件添加到 ASP.NET 标签服务器控件?

IIS 6/ASP.NET Windows 身份验证 list ?

如何从 asp:Repeater 循环遍历项目模板中的项目?

您对 Windows Workflow Foundation 有何体验?

在每个控制器的 ASP.NET WebAPI 上强制使用 CamelCase

ASP.NET 中的 <% %>(嵌入式代码块)

获取页面上特定类型的所有 Web 控件

如何验证用户在 CheckBoxList 中 Select 了至少一个复选框?

具有自定义报告创建能力的最佳 ASP.NET 报告引擎

投票有什么问题?

远程计算机无法连接到 Visual Studio Web 服务器

IIS - 无法通过 ip 地址而不是 localhost 访问页面

在 ASP.NET 标识中添加角色

将 HTML 字符串转换为图像