2

在生产服务器上运行的应用程序如何访问用户正在访问应用程序的机器的登录用户名?例如,我目前登录到我在INTRA公司内部网上的机器。我的用户名将是INTRA\Username

我已将特定用户名添加到数据库,并希望根据数据库检查此 Intranet 用户名,以限制对应用程序的访问并在整个应用程序中利用该用户名。

目前,我正在使用以下代码来访问用户名:

 Private username As String = Thread.CurrentPrincipal.Identity.Name

这在 localhost 上运行良好,但是在开发服务器上对数据库进行身份验证时,出现以下错误:

用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败。

这是不正确的方法吗?这甚至可能吗,还是安全问题太大了?该应用程序将是在 IE 商店中运行的内部 Intranet 应用程序。已经存在的相关 web.config 部分包括:

    <identity impersonate="true"/>
    <authentication mode="Windows"/>
    <authorization>
        <deny users="?"/>
    </authorization>

<connectionStrings>
    <add name="CONNSTR" connectionString="Initial Catalog=DATANAME;Data Source=servername;Integrated Security=True;" providerName="System.Data.SqlClient"/>
</connectionStrings>
4

3 回答 3

1

在服务器上设置您的 Web 应用程序时,您需要进入 Document Security 部分(它的名称会根据您的服务器运行的 IIS 版本而变化,但类似),关闭匿名身份验证,然后打开关于 Windows 身份验证。这告诉服务器从浏览器请求 Windows 登录身份验证。(也许web.config比我更了解文件的人 [几乎是任何人] 都可以编辑它以指向相关位;我认为不是,impersonate但如果我知道,我会说。到目前为止,我只通过用户界面。)

于 2009-10-19T15:20:23.283 回答
0

在您的示例中,您正在查找运行网络服务器的用户名。您所追求的是访问该页面的用户的用户名。

尝试这样的事情:

于 2009-10-19T15:21:06.043 回答
0

如果将目录安全设置为 Windows 身份验证不起作用,请将其更改为基本身份验证。您还需要指定要进行身份验证的域名。这是我们可以让安全性从 IIS 层传播到数据库的唯一方法。不幸的是,这会导致用户名和密码以明文形式发送。它不是最好的解决方案,但由于事情在 Intranet 上,所以在我们更新登录过程时它可以工作。

于 2009-10-19T16:29:26.113 回答