【问题标题】:Connection to AD works fine in IIS but not in VS与 AD 的连接在 IIS 中工作正常,但在 VS 中却不行
【发布时间】:2019-10-11 19:44:16
【问题描述】:

我正在使用以下代码检查 AD 中是否存在用户名,当我在 VS 中调试应用程序时,它会抛出“用户名或密码不正确”异常,但如果我在 IIS 中发布完全相同的代码,它可以工作很好,按预期返回真或假

private bool UserExist(string path, string username)
        {
            DirectoryEntry entry = new DirectoryEntry(path);
            try
            {
                object obj = entry.NativeObject;
                DirectorySearcher search = new DirectorySearcher(entry);
                search.Filter = "(SAMAccountName=" + username + ")";
                SearchResult result = search.FindOne();
                if (null == result)
                {
                    return false;
                }
                else
                {
                    return true;
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

【问题讨论】:

  • IIS 应用程序池在什么凭据下运行?它是否比您的帐户拥有更多的 AD 访问权限? obj 的意义何在?我没有看到它在您的代码中的任何地方使用。
  • 在 iis 在默认的“ApplicationPoolIdentity”下运行,而 obj 是的,它什么也不做,如果我删除该行仍然抛出异常,实际上我正在连接到两个 AD 和一个在 IIS 和 VS 中都可以正常工作,但另一个不能

标签: c# asp.net-mvc-4 iis active-directory


【解决方案1】:

这可能意味着用于访问域的凭据在域上不受信任。

当使用 ApplicationPoolIdentity 时,它作为计算机进行身份验证。因此,只要该计算机的域在两个域中都受信任,那么它就可以在两个域中运行。

当您使用 IIS Express 在 Visual Studio 中进行调试时,它会在您自己的凭据下运行。如果它适用于一个域而不适用于另一个域,则意味着您的用户帐户在一个域上不受信任。

你有两个选择:

  1. 更改您的代码以在DirectoryEntry 的构造函数中传递正确的凭据,具体取决于您需要连接到的域,或者

  2. 如果您的计算机与您所说的可以运行的计算机位于同一域中,则在您的计算机上安装完整的 IIS(不是 IIS Express),在 IIS 中设置站点,然后setup Visual Studio to debug the app in IIS。这样,调试时它就不会在您的凭据下运行。

【讨论】:

  • 我的凭据属于无法在 VS 上运行的 AD,最近我的用户已从“myname.ext”更改为“myname”,但在开发服务器中,用户仍然是“myname” .ext”,你认为这与它有关吗?因为在用户更改之前,我能够从 VS 连接到两个域
  • 您的用户名已更改(您使用什么登录计算机)?更改后您是否已注销?
  • 要登录到开发服务器,我只使用“myname”,但在任务管理器中用户仍然显示为“myname.ext”,我还没有注销
  • 您可以尝试专门注销,而不仅仅是断开连接。 (我假设您使用的是远程桌面?)
猜你喜欢
  • 2017-08-16
  • 2020-05-25
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多