gpt4 book ai didi

c# - 在 Azure 网站上时,UserPrincipal.SetPassword 抛出 UnauthorizedAccessException

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:46 25 4
gpt4 key购买 nike

我可以使用 System.DirectoryServices.AccountManagement 成功设置用户密码,方法是:

using (var up = new UserPrincipal(principalContext))
{
up.SetPassword(password);
}

但是,当我从 Azure 网站执行相同的代码时,它会抛出 UnauthorizedAccessExceptionAccess is denied. 。这是堆栈跟踪:

at System.DirectoryServices.DirectoryEntry.Invoke(String methodName, Object[] args)
at System.DirectoryServices.AccountManagement.SDSUtils.SetPassword(DirectoryEntry de, String newPassword)
at System.DirectoryServices.AccountManagement.ADStoreCtx.SetPassword(AuthenticablePrincipal p, String newPassword)
at System.DirectoryServices.AccountManagement.PasswordInfo.SetPassword(String newPassword)
at System.DirectoryServices.AccountManagement.AuthenticablePrincipal.SetPassword(String newPassword)
at Cdp.ServiceBus.Adapters.ActiveDirectoryAdapter.CreateUser(String username, String password) in C:\agent\_work\a1b9797a\CDP\src\Cdp.ServiceBus.Adapters\ActiveDirectoryAdapter.cs:line 46

Active Directory 实例正在 Azure VM 上运行。该网站连接到同一个虚拟网络。在本地开发时,我使用 VPN 连接到同一虚拟网络。

principalContext 使用 ContextType.Domain 设置和ContextOptions.Negotiate | ContextOptions.Signing | ContextOptions.Sealing 。我还将虚拟网络的 IP 地址指定为上下文的名称(即主机)。该上下文的用户名和密码是AD VM中的admin。

查看 AD VM 的安全日志,我可以看到在本地开发时,会创建一个日志条目,因为我登录的管理员正在尝试重置密码。在 Azure 上时,不会创建此类日志条目。由此我想我可以得出结论,从未接到电话。没有其他日志条目向我提供它已处理和/或无法处理它的信息。

我最有根据的猜测是 Azure 不允许执行 SetPassword API。这可以解释相当低级别的 UnauthorizedAccessException 。你觉得怎么样?

编辑:

SDSUtils.SetPassword的签名是:

[SecurityCritical]
internal static void SetPassword(DirectoryEntry de, string newPassword)

Azure 是否允许运行属性为 SecurityCritical 的代码?

最佳答案

我对此进行了一些研究,我想我已经弄清楚了。为了使其正常工作,底层连接必须是安全的:

PrincipalContext _pc = new PrincipalContext(ContextType.Domain, "FQDN", null, ContextOptions.SecureSocketLayer | ContextOptions.Negotiate, _svsUser, _svsPwd);
UserPrincipal _up = UserPrincipal.FindByIdentity(_pc, IdentityType.SamAccountName, usernameToChange);
_up.SetPassword(newPassword);
_up.Save();

注意 ConextOptions.SecureSocketLayer | ContextOptions.Negotiate在构造函数调用中。添加此内容并在我的 DC 上配置 SSL 后,它就开始工作。

关于c# - 在 Azure 网站上时,UserPrincipal.SetPassword 抛出 UnauthorizedAccessException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32634686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com