azure应用服务active directory身份验证访问被拒绝

7z5jn7bk  于 2021-06-20  发布在  Kudu
关注(0)|答案(1)|浏览(453)

我们有一个web应用,我们正在从azure经典云服务过渡到应用服务web应用。经典的云服务是在一个包含我们的域控制器(常规广告,而不是azure广告)的vnet上。应用程序服务使用vnet集成,因此它连接到我们的vnet,并因此连接到dcs(基本上通过客户端vpn)。
当我们运行在web应用程序中创建新广告的代码时,用户创建成功,但是一旦我们尝试更改任何内容(设置密码、添加到组等),我们就会得到
“访问被拒绝(hresult的异常:0x80070005(e\u accessdenied)
我们用来创建和编辑帐户的用户可以通过云服务正常工作,所以这不是广告权限问题。
为了简化调试,我编写了一些powershell,可以在kudu控制台中运行,看看是否可以捕获错误:

$DomainControllerIpAddress = "< domain controller IP>"
$domain   = "<domain name>"

$BaseDN=  "LDAP://$($DomainControllerIpAddress)"
$domAdmin = "domain\adminaccount"
$domPass  = "<password>"

$userdn = "CN=TestUser,OU=TestOU,OU=ParentOU,DC=domain,DC=local"

$pass = "<newuserpassword>"

$userobj = New-Object System.DirectoryServices.DirectoryEntry($basedn + "/" + $userdn), $domAdmin, $domPass

$userobj.AuthenticationType = @("Secure","Sealing") # adding this to try to force kerberos makes no difference

$userobj.Invoke("SetPassword",$pass) # this fails in the App service but works fine everywhere else

此代码在连接到与应用程序服务相同的dc的本地计算机上运行正常,在云服务角色示例之一的powershell控制台上运行正常,但在应用程序服务中出现错误。
我们可以成功地创建用户这一事实证明了ldap连接是有效的,但我不明白为什么设置密码会出现拒绝访问错误。

zd287kbt

zd287kbt1#

我和微软公司就这个问题进行了一次工程级的沟通。简而言之,出于“安全原因”,某些类型的调用在应用程序服务中受到限制。对setpassword的调用就是其中之一。这不是一个bug,而是app服务产品经理深思熟虑的设计决策。
如果从虚拟机执行这些命令,则可以运行这些命令。我们最后就是这么做的。我们在一个具有内部负载平衡器的可用性集中启动了vm。我们部署了一个非常小的具有安全性的.net核心api,它只为我们调用ldap。不是一个非常优雅的解决方案,但它的工作。

相关问题