2

在这个问题上,我一直在努力解决问题,一直在堆栈溢出,但仍然无法修复它。

目标

我正在尝试在 Windows Server 2019 Azure VM 上按需创建帐户。VM 未加入域,只是该孤独工作组中的独立服务器。该应用程序是在 Azure 中作为应用服务运行的 ASP.NET Framework v4.6.1 Web API 应用程序。

    using (var context = new PrincipalContext(ContextType.Machine, vmData["ip"].ToString(), null, ContextOptions.Negotiate, $@"{vmData["name"]}\{vmData["username"]}", vmData["password"].ToString()))
    {
        using (var user = new UserPrincipal(context))
        {

            user.DisplayName = username;
            user.SamAccountName = username;
            user.SetPassword(password);
            user.PasswordNeverExpires = true;

            user.Save();

            using (var group = GroupPrincipal.FindByIdentity(context, "Administrators"))
            {
                group.Members.Add(user);
                group.Save();
            }
        }
    }

问题

在本地运行此代码时,一切正常,与 Azure VM 的连接成功,用户被创建并添加到服务器上的本地管理员组。

当此代码发布到 Azure 中的应用服务时,它总是会抛出System.Runtime.InteropServices.COMException: Access is denied.at line user.DisplayName = username;。我假设在尝试设置 user.Displayname 时以某种方式查询服务器,但用户的属性不需要是唯一的,我从以前的项目中知道,真正检查唯一属性时会发生 Save()用户。

研究和尝试修复

  • 我禁用了允许从应用服务 IP 到 Azure VM 的入站流量的防火墙规则,只是为了查看我是否会得到不同的异常 => 无法到达超时/服务器。防火墙规则似乎是正确的
  • 我完全禁用了所有防火墙,以确保防火墙规则没有错过任何所需的端口或协议 => 访问被拒绝!
  • 我附加了 Visual Studio 以远程调试应用服务,希望从异常中获取更多详细信息 => 访问被拒绝,仅此而已。
  • 尝试从PSEXEC 修复,访问被拒绝错误
  • 发现在 UserPrincipal.FindByIdentity (System.DirectoryServices.AccountManagement) => 使用 4.6.1中存在使用 .NET 4.5 .NET 4.5 错误
  • 检查远程服务器以验证正在创建的帐户不存在
  • 检查远程服务器事件日志以查找可能与此问题、登录失败、审核等相关的任何日志。什么都找不到。

最后一招

此时我将在这些虚拟机上启用 OpenSSH 并开始尝试以这种方式创建本地帐户。

有人知道在哪里看,其他的东西可以尝试吗?

提前致谢!

更新 1:

我已将项目从 .NET Framework v4.6.1 更改为 v4.7.2,因为 Azure App Service 运行 .NET v3.5 或 .NET v4.7。

显示 .NET v4.7 设置的 Azure 应用服务配置屏幕截图

希望这可以在我的本地机器上产生相同的异常,我再次进行了测试,它确实在同一行抛出了 COMException。但是,它不是同一个 COMException。

System.Runtime.InteropServices.COMException: Multiple connections to a server or shared resource by the same user, using more than one user name, are not allowed. Disconnect all previous connections to the server or shared resource and try again.

由于我刚刚对 v4.7.2 进行了更改,因此我仍在研究这个新异常,只是认为这些额外信息对于添加到原始问题可能很重要。

4

1 回答 1

0

看起来 Azure 应用服务可能会阻止某些 LDAP/Active Directory 交互。

查看以下问题/答案: Azure App Service Active Directory Authentication Access Denied

authO 写了一篇使用 LdapConnection(也是 .Net 的一部分)的文章。我已经能够使用该库而不是 PrincipalContext 或 DirectoryEntry 成功完成一些工作。

https://github.com/auth0-blog/blog-ldap-csharp-example/blob/master/LDAPClient/LDAPClient/Client.cs

于 2020-05-21T17:22:30.610 回答