Windows身份验证MVC - 1个IIS_Express服务器,2个应用程序,2个结果

时间:2015-10-13 01:44:32

标签: asp.net-mvc-5 windows-authentication iis-express

美好的一天 我完全难过了。我正在使用MS VSExpress 2013 for Web开发MVC应用程序,我正处于需要添加Windows身份验证的位置。使用向导创建默认MVC应用程序并选择Windows身份验证,它似乎工作正常。让我们调用默认的App App1,我开发的App App2。

监控Watch内的Context.User对象:

App1返回:

    User    {System.Security.Principal.WindowsPrincipal}
    System.Security.Principal.WindowsIdentity
    AuthenticationType  "Negotiate" string
    IsAuthenticated         true    bool
    Name          "MyDomain\\Andrew"    string

使用开发的应用程序时,结果如下:请注意,返回的对象不同(App1 = System.Security.Principle.WindowsPrinciple,App2 = System.Web.Security.RolePrinciple。

    User    {System.Web.Security.RolePrincipal} 

    Identity    {System.Security.Principal.GenericIdentity} 
    AuthenticationType    ""    string
    IsAuthenticated    false    bool
    Name                  ""    string

    HttpContext.Current.Request.LogonUserIdentity.Name  "MyDomain\\Andrew"

将开发的应用程序开发服务器属性切换为Windows身份验证=启用时,匿名身份验证=已禁用,结果立即显示:

Server Error in "/" Application. 
Resource cannot be found. 
Http 404... 
Requested URL:/Account/Login

我检查并比较: 两个应用程序的Web.config文件和IISExpress \ config \ applicationhost.config设置。

我的知识有限(基于阅读我可以找到的所有问题),我猜App2认为它使用的是表单身份验证,而不是Windows身份验证。 App2通过

获取用户信息

HttpContext.Current.Request.LogonUserIdentity.Name对象(在SO上找到)。

我添加了:

        <add key="autoFormsAuthentication" value="false" />

到Web.config ......没有快乐。

任何人都知道为什么这两个应用程序返回不同的用户对象,以及哪些可以更正?为什么App2在与App1相同的IISExpress服务器上没有得到IsAuthenticated = true?

由于

1 个答案:

答案 0 :(得分:0)

http://www.itorian.com/2013/05/windows-authentication-in-mvc4-with-iis.html

由于某些奇怪的原因(编辑以下是原因 - &gt; ASP.NET MVC3 and Windows Auth on IIS keeps redirecting to /Account/Login / EDIT ,向导生成的app1在Web中不需要这两行的.config

<add key="autoFormsAuthentication" value="false" />
<add key="enableSimpleMembership" value="false"/>

添加第二行后,返回的Context User对象已从

更改
System.Security.Principal.GenericIdentity 

System.Security.Principal.WindowsPrincipal

一切都很好。 还要确保您的IISExpress服务器配置文件applicationhost.config(在IISExpress安装文件夹中)包含所需的正确条目: 全球进入:

           <windowsAuthentication enabled="true">
                <providers>
                    <add value="Negotiate" />
                    <add value="NTLM" />
                </providers>
            </windowsAuthentication>