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,它的底层Identity是System.Security.Principal.WindowsIdentity.
另一方面,如果用户被认证,则User对象和ts Identity是System.Security.Claims.ClaimsPrincipal和System.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在没有用户通过身份验证时使用空.我会接受任何解释这个问题的答案.
| 归档时间: |
|
| 查看次数: |
39379 次 |
| 最近记录: |