【问题标题】:Get user name and email address in asp.net form以 asp.net 形式获取用户名和电子邮件地址
【发布时间】:2019-09-07 12:05:10
【问题描述】:

我的 asp.net forms 应用程序的每个用户都使用他们的 Active Directory 凭据登录到 PC。 ASP.NET 表单应用程序如何获取当前登录到 PC 的用户名和电子邮件地址?

【问题讨论】:

标签: asp.net active-directory


【解决方案1】:

无法保证找出他们使用哪个用户登录计算机的方法。但是,您可以:

  1. Enable Windows Authentication 所以他们需要使用 AD 帐户对您的网站进行身份验证
  2. 将您的网站添加到他们计算机上 Internet 选项中的受信任站点(这可以在组策略中完成),以便 IE 和 Chrome 将自动发送当前登录用户帐户的凭据。 (Firefox 使用自己的 network.negotiate-auth.delegation-uris 设置)

如果您跳过第 2 步,则会提示用户输入凭据。如果在步骤 2 中发送的凭据由于任何原因失败(例如,他们使用本地帐户而不是域帐户登录),将提示用户输入凭据。然后他们可以输入他们想要的任何 AD 帐户,这可能与他们登录计算机时使用的不同。这就是为什么我说没有 100% 保证的方法可以知道他们使用什么帐户登录到他们的计算机。

如果只有部分用户拥有 AD 帐户,而有些则没有,那么您可以使用拆分表单和 Windows 身份验证。我以前做过,并在a past answer 中描述了我是如何做到的。

【讨论】:

  • @Gariel Luci 我必须跳过第 2 步,因为我不能要求所有客户更改他们的浏览器。我尝试了第 1 步,但到目前为止,没有成功。我正在查看(并且还没有运气)的代码如下: UserPrincipal user = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "domain/username");到目前为止,用户返回 NULL 因为我无法确定用户名。此外,应该没有应用程序的身份验证,没有身份验证表单。客户向我保证,每个人在登录 PC 时都在 AD 中进行了身份验证。
  • 如果你想要“不验证应用程序,不验证表单”,那么你别无选择,只能执行第2步。你不能没有。您需要客户端自动发送凭据,除非您的站点受信任,否则不会发生这种情况。如果您的站点是一个 Intranet 站点,那么它可能已经被信任。如果您的 Windows 身份验证已经在工作,请查看 Request.LogonUserIdentity 告诉您的内容。
  • 这个站点是一个 Intranet 站点,并且该站点是受信任的(在 IE 中),我检查了。 Request.LogonUserIdentityName 返回 NT AUTHORITY\IUSR 我不知道这是否意味着什么,因为我通过 RDP 登录到该站点。谢谢。
  • 听起来您的 Windows 身份验证可能无法正常工作。你在HttpContext.Current.User.Identity.Name 看到了什么?
  • 空 - 什么都没有。
【解决方案2】:

使用HttpContext.Current.Request.LogonUserIdentity 获取用户名而不是查询AD 以获取电子邮件检查How to get a user's e-mail address from Active Directory?

【讨论】:

  • 既然 Hidalgo 说它是一个“表单应用程序”,Request.LogonUserIdentity 只会给你登录表单中使用的用户名,这可能与他们的 AD 用户名不匹配。
  • @Gabriel Luci 让我澄清一下。没有登录表格。该页面正在使用 Windows 身份验证。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-25
  • 1970-01-01
  • 1970-01-01
  • 2022-07-14
  • 2013-08-16
  • 2011-04-30
  • 2023-01-28
相关资源
最近更新 更多