【问题标题】:getting windows username with javascript用javascript获取windows用户名
【发布时间】:2010-06-10 10:53:30
【问题描述】:

我有一个用 ASP.net 和 C# 构建的网站。我们称它为 webapp。它使用表单系统登录,并且无法轻松更改。

我收到了将登录更改为某种 Windows 身份验证的请求。我会解释的。 我们的 windows 登录使用活动目录让用户登录到他们的 windows 帐户。他们的登录名是 sXXXXXXX。 X 是数字。 在我的 webapp 中,我想从他们的活动目录登录中获取用户号码,并检查这些是否存在于 webapp 数据库中。如果存在,他们将自动登录。如果不存在,他们将被引用到当前正在使用的 webapp 系统的常规登录页面。

我尝试更改我的 IIS 以禁用匿名登录并启用 Windows 身份验证,从而使用户浏览器将其当前登录的用户名发送到我的 web 应用程序。我也将网络配置从“表单”更改为“Windows”,这使得我的整个 web 应用程序过时了,因为整个表单系统无法正常工作。

我的问题是 - 浏览器是否有不同的方式仅将用户名发送到我的 web 应用程序?我想也许是javascript,我只是不知道如何实现它,如果它甚至可能的话。我知道这不是很安全,但所有这些平台和系统都是在互联网之外构建的,它位于专用网络上。

【问题讨论】:

  • 我怀疑。 javascript在相当孤立的环境中执行,它受到很大限制。没有人会允许您获取此类数据

标签: c# asp.net javascript iis


【解决方案1】:
<script language="javascript">
    var username = '<%HttpContext.Current.User.Identity.Name %>';

</script>

【讨论】:

  • 这仅在启用 Windows 身份验证时才有效。用户不能这样做。
【解决方案2】:

您可以通过 javascript 获取用户的域凭据的唯一方法是部署某种类型的 ActiveX 组件以将该数据公开给浏览器。我不建议这样做。

我会考虑为表单身份验证实现登录页面,该页面使用HttpContext.Current.User 在页面加载时对用户进行身份验证。

表单的工作方式是,如果未经身份验证的用户尝试访问受访问控制的页面并且没有登录(没有 cookie),他们将被重定向到允许登录的登录页面(这会设置cookie 在客户端)。然后将用户定向到他们最初请求的页面。您只需自动化登录部分。

如果您同时使用直通和需要手动登录的用户,您可以检查他们的客户端 IP 地址,看看它是否与您域中的一个匹配。

【讨论】:

  • 当前系统完全按照您所说的进行-用户在登录页面中进行身份验证,该页面在客户端设置cookie。当我尝试在 IIS 和 web.config 上启用 Windows 身份验证时,我的站点无法正常工作 - 整个登录表单和站点实际上都是基于 web.config 中的表单身份验证模式 - 我无法将其更改为我的网站将无法正常工作。我知道 ActiveX 不安全,不推荐使用,但我只是看不到另一种方式……如果有的话,我很乐意知道。如果没有,我想了解一下如何实现 ActiveX。
  • 这里有一个方便的教程:dotnetslackers.com/articles/csharp/…。但我不禁认为有一个明显的方法可以解决这个问题。我只是想不出来!
【解决方案3】:

我找到的将用户名发送到服务器的解决方案是:

string winlogon = Request.ServerVariables["LOGON_USER"];

在 IIS 中启用 Windows 身份验证模式后。

【讨论】:

  • 这将返回您运行该服务器进程而不是客户端进程的用户名。
  • 我确定这不在 JavaScript 中,可能在您的服务器中?
  • 是的,这只是让服务器说出它认为用户是谁并将其返回给客户端。如果 IIS 配置为模拟请求,它将反映客户端上的用户。
猜你喜欢
  • 2015-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多