【问题标题】:Retrieving AD user using User.Identity.Name in Web App在 Web App 中使用 User.Identity.Name 检索 AD 用户
【发布时间】:2018-10-18 09:02:26
【问题描述】:

我正在尝试根据此代码提供的名称为 Intranet Web 应用检索 AD 用户:

var userName = User.Identity.Name.Split('\\')[1];

它返回 DOMAIN\\USER,然后对其进行切片,以便我可以只抓取“USER”。

然后我将它传递给这个方法:

public bool DoesUserExist(string userName)
{
    using (var domainContext = new PrincipalContext(ContextType.Domain, Domain))
    {
        using (var foundUser = UserPrincipal.FindByIdentity(domainContext, IdentityType.SamAccountName, userName))
        {
            return foundUser != null;
        }
    }
}

在我的开发机器上运行或实时发布,它总是返回 false。

但是,如果我这样做:

var domainUser = UserPrincipal.Current;

它正确检索用户(在本例中为我自己),当我比较 SamAccountName 和我在方法中传递的名称时,它们是相同的。使用它的问题是,当网站实时发布时,它只获取 IIS 应用程序池登录名,而 User.Identity.Name 获取网站上用户的帐户。

我尝试过传递未修剪的名称,但也没有用。

我的想法不多了;有人知道我是否在这里遗漏了任何内容或有任何可以解决此问题的建议吗?

【问题讨论】:

  • 代码看起来与我成功使用的代码几乎相同。你的Domain 有没有可能不正确?您是否尝试过只使用using (var principalContext = new PrincipalContext(ContextType.Domain)),它应该连接到默认域?
  • @ste-fu 这行得通!谢谢你。显然我给它的域是不正确的。你想用那个来回答它,以便我可以接受它作为答案吗? :)

标签: c# asp.net .net iis web-applications


【解决方案1】:

您的Domain 有没有可能不正确?

你试过了吗

using (var principalContext = new PrincipalContext(ContextType.Domain))

这应该连接到默认域

【讨论】:

  • 这行得通,谢谢。一位同事为我提供了一个可以使用的域名,我将其传递给该方法,但一定不是正确的;这解决了问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-13
  • 1970-01-01
  • 2020-02-28
  • 2020-11-29
  • 1970-01-01
  • 2021-10-05
相关资源
最近更新 更多