我有一个在机器上运行的web应用程序,只有当特定用户登录到该机器时才能使用。所以在page_load中,我有以下代码:
dim sName as string = System.Windows.Forms.SystemInformation.UserName
if sName <> 'sstation' then
Response.Direct("NoAccess.aspx")
end if
当我在Visual Studio中调试时,如果我以sstation身份登录到计算机,则会加载页面,否则会加载NoAccess页面。然而,如果我在网络浏览器中打开页面,它总是会把我带到NoAccess页面,我不知道为什么!任何想法
我在页面上添加了一个文本框,并添加了以下代码:
lblErrorMessage.Text = "You are logged in as " + sADname
即使我以sstation的身份登录到计算机,名称也会显示为Administrator,那么当页面位于服务器上时,System.Windows.Forms.SystemInformation.UserName来自哪里?
此代码运行在web服务器上,而不是用户登录的计算机上。它将返回IIS运行的用户帐户。调试时,它在本地计算机上运行的原因是在这种情况下,web服务器运行在您的本地计算机上。可以在IIS站点设置为使用的App Pool
中配置此帐户。有关配置的更多信息,请参阅此链接。
为了在IIS中获得客户端计算机的用户帐户,必须为Windows authentication
配置IIS,并且客户端和服务器很可能都需要成为Domain
的一部分。如果这不可能,您将需要使用其他类型的身份验证,最简单的是Forms
身份验证或ASP.NET Identity
。
这里有一些链接可以让你开始。
- ASP.NET标识
- 表单身份验证
- Windows身份验证