我正在创建一个新的MVC应用程序并尝试设置Windows身份验证,但是当我尝试登录时它会拒绝我。
我不认为这与IIS Express或我的浏览器有关,因为我有其他使用Windows身份验证的MVC应用程序可以正常工作。在查看交易日志之后,它似乎正在尝试通过匿名身份验证进行连接,这让我感到困惑,因为如果在我的web.config中有这个:
<authentication mode="Windows"/>
在我的项目属性中,我还启用了Windows身份验证并禁用了匿名身份验证。
我不确定要包含哪些其他信息,所以如果需要更多信息请告诉我。在这里迷失方向,请帮助。
更新: 更近但仍然没有工作, 从我的Web配置中删除以下内容修复了我的匿名身份验证问题:
<authorization>
</authorization>
但是现在在我的堆栈跟踪中,我看到以下行没有出现在我正在使用的其他Windows身份验证应用程序中:
AspNetAppDomainEnter Data1="/LM/W3SVC/45/ROOT-1-130825677814817784" 14:36:37.272
AspNetStartHandler Data1="ASP.global_asax", Data2="Start" 14:36:37.272
AspNetPipelineEnter Data1="System.Web.Security.WindowsAuthenticationModule" 14:36:37.272
AspNetPipelineLeave Data1="System.Web.Security.WindowsAuthenticationModule"
这是我得到的错误:
ModuleName ManagedPipelineHandler
Notification EXECUTE_REQUEST_HANDLER
HttpStatus 401
HttpReason Unauthorized
HttpSubStatus 0
ErrorCode The operation completed successfully.
(0x0)
ConfigExceptionInfo
目前还不确定他们的意思,但似乎他们可能与我的问题有关。
更新: 我剩下的问题似乎是我正在使用的活动目录组特有的。用户似乎没有我在FilterConfig中的角色,所以当我删除所有过滤器角色时,我被拒绝访问。
解决: 为了完整起见,我将添加修复授权问题的内容。出于某种原因,在我的FilterConfig中添加多个角色时出现问题,如下所示:
filters.Add(new HandleErrorAttribute());
filters.Add(new System.Web.Mvc.AuthorizeAttribute() { Roles = Auth.ROLE1 });
filters.Add(new System.Web.Mvc.AuthorizeAttribute() { Roles = Auth.ROLE2 });
filters.Add(new System.Web.Mvc.AuthorizeAttribute() { Roles = Auth.ROLE3 });
但是当我创建一个汇总组并将其全部添加到AD组中时,那么就像这样授权单个组:
filters.Add(new HandleErrorAttribute());
filters.Add(new System.Web.Mvc.AuthorizeAttribute() { Roles = Auth.ALL_ROLES });
它解决了我的授权问题。
答案 0 :(得分:2)
您可能需要强制进行身份验证,可能只需将<authorization />
标记添加到<system.web>
元素:
<authorization>
<deny users="?" />
</authorization>