我创建一个内联网asp.net大家在公司应该有机会获得MVC应用程序。 我需要运行模拟的数据库访问等的网站,但我想知道每个用户是谁。
当我看到Page.User.Identity.Name
它是空白。 是否有可能获得用户的Windows帐户名,即使网站运行的模拟的?
编辑:这里有一个小的详细信息。 我在IIS 6站点使用匿名访问运行启用。 该网站下可以访问数据库中的系统帐户来运行(因为所有的员工没有访问数据库)。
我的web.config中有<authentication mode="Windows" />
和<identity impersonate="true"/>
我的目标是,用户不必登录 - 这一事实,他们登录到我们的网络(而事实上,该网站是不是在一个外部IP)是不够的认证。 我只是想知道用户是为了跟踪他们做出改变,谁等等。
随着<authentication mode="Windows"/>
在您的应用程序并在IIS中启用匿名访问,您将看到以下结果:
System.Environment.UserName: Computer Name
Page.User.Identity.Name: Blank
System.Security.Principal.WindowsIdentity.GetCurrent().Name: Computer Name
随着<authentication mode="Windows"/>
在你的应用程序,而“匿名访问”禁用的,只有“集成Windows身份验证”在IIS中,您将看到以下结果:
System.Environment.UserName: ASPNET (user account used to run ASP.NET service)
Page.User.Identity.Name: Domain\ Windows Account Name
System.Security.Principal.WindowsIdentity.GetCurrent().Name: Computer Name\ASPNET
随着<authentication mode="Windows"/>
和<identity impersonate ="true"/>
在你的应用程序,而“匿名访问”禁用的,只有“集成Windows身份验证”在IIS中,您将看到以下结果:
System.Environment.UserName: Windows Account Name
Page.User.Identity.Name: Domain\ Windows Account Name
System.Security.Principal.WindowsIdentity.GetCurrent().Name: Domain\ Windows Account Name
试试这个
System.Security.Principal.WindowsIdentity.GetCurrent().Name
它应该返回一个字符串与用户的登录名
除非这个功能已经在MVC框架下改变了,我不认为它有,Page.User.Identity.Name仍然应该工作。 听起来像是你的站点设置为允许匿名身份验证。 如果是这样,请尝试禁用它。
我只是想后我的修正,因为没有人说过这事。
我有同样的问题时,我发表了网站服务器,但不是我的地方。 所有的设置都是一样的。 然而,在IIS中的“默认网站”从来没有被关闭。 它运行和拦截流量,即使没有任何与之相关的网站。 匿名身份验证是默认开启的,但在我的网站被关闭在端口80上运行它似乎没有关系,我的网站已经把手机关掉了......因为默认是开启它已开启所有流量到端口80。
禁用固定问题的默认Web。 也改变端口8080级的作品。
我希望这可以帮助别人。