2010-06-23 237 views
0

ASP.Net相当新颖,我将不胜感激。有没有办法在不强迫他们登录的情况下获取网站访问者的Windows NT用户名?我似乎能够得到的唯一东西是在我的Web服务器上登录的用户名。例如,John Doe的windows登录名是jdoe,Joe Smith的名字是jsmith,如果我在我的页面上有代码显示他们的用户名称为John Doe,它将显示“Welcome jdoe”,Joe Smith将显示“Welcome jsmith。 “在C#中获取访客的Windows用户名#

最终,我将利用这一信息来查询之类的电子邮件,姓和名的活动目录等

提前感谢!

回答

0

如果您的网站是在Intranet上,您的用户使用Internet Explorer和您启用“集成Windows身份验证”,和你的ASP.NET application allows Windows authentication,那么你的ASP.NET应用程序可以查找用户的使用此方法的活动目录/本地用户和计算机:

application.User 

..这将返回一个WindowsPrincipal对象。

1

您需要让用户登录;没有其他办法可以让你获得他们的用户名。浏览器将通过设计阻止您获取该信息。

您可以通过在web.config文件中改变认证节点在ASP.NET中使用Windows身份验证:

<authentication mode="Windows"> 
</authentication> 

一旦你做到了这一点,你将有足够的信息来方便地查询AD。

+0

登录的是什么?网站或Windows? – JBRWilkinson 2010-06-23 13:38:55

+0

该网站将在后端使用Windows身份验证(和Windows帐户凭据)(与存储在SQL数据库中的帐户相反)。 – Alan 2010-06-23 13:42:58

+0

您可能还想看看如何使用Windows身份验证模拟。这可能更适合您尝试实施的安全模型。 – 2010-06-23 20:35:46

1

如果没有登录至少一次(或者对openId进行身份验证),那么与外部(互联网)用户进行交互将会非常困难(甚至不可能)。

原因:

这是一个鸡和鸡蛋的问题。

当您的ASP页面运行时,它将作为IIS进程运行,因此默认情况下,无论哪个帐户正在运行IIS都将是已登录的帐户。

所以你不知道什么帐户模仿。即使您确实知道哪个帐户,您的IIS也不应具有适当的权限来在不提供凭据(即登录)的情况下冒充任何任意帐户。

如果你仔细想想,能够在任何页面上显示用户windows用户名,这是一个巨大的安全风险。

如果没有登录,您可以要求用户输入用户名,并将该值存储在cookie或LSO中。然后,无论用户何时访问您的页面,您都可以阅读该cookie并打印该值。如果cookie被删除,只需向用户提供一个对话框,要求他们存储他们的用户名。显然,当你想搜索AD时,这并不会帮助你(并且为了安全起见,你不应该提供没有验证的面向外部的AD搜索)。

这里唯一真正的方法是要求您的用户登录(如果您想提供自定义体验)。

+0

我应该提到这是一个内联网站点。 – Sportsfan33 2010-06-23 13:58:14

0

你可以做一个LDAP查询检索活动目录属性DisplayName,或名字姓氏,基于SAM帐户= JDOE

相关问题