【问题标题】:Azure App Service Active Directory Authentication Access DeniedAzure 应用服务 Active Directory 身份验证访问被拒绝
【发布时间】:2018-08-18 05:03:08
【问题描述】:

我们有一个 Web 应用,我们正在从 Azure 经典云服务过渡到应用服务 Web 应用。经典的云服务位于包含我们的域控制器(常规 AD,而不是 Azure AD)的 vnet 上。 App 服务使用 VNET 集成,因此它连接到我们的 vnet,因此也连接到 DC(主要通过客户端 vpn)。

当我们在 web 应用程序中运行创建新 AD 的代码时,用户已成功创建,但只要我们尝试更改任何内容 - 设置密码、添加到组等,我们就会得到 ​​p>

“访问被拒绝。(来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))”

我们用来创建和编辑帐户的用户可以在云服务中正常工作,因此这不是 AD 权限问题。

为了尝试简化调试,我编写了一些可以在 Kudu 控制台中运行的 Powershell,以查看是否可以捕获错误:

$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 连接有效,但我无法理解为什么设置密码会导致访问被拒绝错误。

【问题讨论】:

  • 你解决过这个问题吗?这几乎与我遇到的问题完全相同。

标签: active-directory azure-web-app-service directoryservices kudu


【解决方案1】:

我就这个主题与 Microsoft 进行了一次工程级别的电话会议。简而言之,“出于安全原因”,某些类型的呼叫在应用服务中受到限制。对 SetPassword 的调用就是其中之一。 这不是错误,而是应用服务产品经理深思熟虑的设计决定。

如果您从虚拟机执行这些命令,则可以运行它们。这就是我们最终所做的。我们在具有内部负载平衡器的可用性集中启动了 VM。我们部署了一个非常小的 .Net Core API,它具有安全性,除了为我们调用 LDAP 之外什么都不做。 这不是一个非常优雅的解决方案,但它确实有效。

【讨论】:

    猜你喜欢
    • 2018-06-26
    • 2016-02-14
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多