首页 > 解决方案 > 等待 Active Directory 身份验证 URL 列表在 Powershell Azure 函数中更新

问题描述

在Powershell Serverless Function中返回 HTTP 响应之前,我需要确保将回复 url 添加v2 Active Directory App中。

目前,我已经成功地使用服务主体连接到 azure,获取活动目录应用程序并使用新的回复 url 更新身份验证列表。

这很好用,但完成这项工作似乎有一些传播期。一切都发生在 Powershell 无服务器函数中,完成后返回 200 HTTP 状态。

收到响应(HTTP 200 OK)后,我将使用Active Directory 身份验证库(ADAL) 使用整页重定向从某些 JS 应用程序登录。

这就是问题所在,一旦 Powershell 运行并返回客户端应用程序尝试使用 ADAL 登录但 Active Directory 提示错误,则提供的 URL 当前不在身份验证列表中。

我已经研究过Start-ThreadJob & Wait-Job但不确定我是否正确使用了第一第二这是最好的方法

示例代码:


$appId = <ACTIVE_DIRECTORY_APP_ID>
$url = <NEW REPLY URL>

$password = ConvertTo-SecureString -String $env:SERVICE_PRINCIPAL_SECRET -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($env:SERVICE_PRINCIPAL_ID, $password)
Connect-AzAccount -ServicePrincipal -Credential $credential -Tenant $env:TENANT_ID

$app = Get-AzADApplication -ApplicationId $appId
$replyUrlList = $app.ReplyUrls

$replyUrlList.Add($url)

Update-AzADApplication -ApplicationId $appId -ReplyUrl $replyUrlList

$status = [HttpStatusCode]::Created
$body = "URL Added Successfully"

Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
        StatusCode = $status
        Body       = $body
    })

目前,AD 身份验证列表的更新时间为 1 分钟 - 在某些情况下为 5 分钟。取决于功能是否从冷启动启动。

只需在此处寻找最佳方法,以确保在尝试使用 ADAL 库进行身份验证之前 100% 添加新的回调 url。

任何帮助都会很棒!

标签: powershellazure-active-directoryazure-functionsserverlessadal.js

解决方案


这不是一个有解决方案的答案。但我想我正在阅读一些我曾多次体验过的东西。

我一直在使用 python 和 Hashicorp vault 来尝试管理应用程序上的令牌/RBAC。但它经常会因为它尚未更新而中断,因为从 AAD 到后端的传播与我被告知的异步。

我什至检查了我在哪里使用 ADAL 来循环应用程序以验证它是否良好。但即便如此,它在某些情况下仍然会失败。这损害了我试图实施的自动化。

现在您遇到了一些看起来相似的问题,而是在将回复 url 添加到现有应用程序时。我的测试问题是;在创建应用程序时提供回复 URL 是否有效?如果是这样,并且测试是 100%,那么您遇到了同样的问题。

对我来说,在应用程序上预先创建所有必要的属性是帮助我绕过这个烦人的问题的原因。因为我不认为在任何地方添加睡眠是前进的好方法,而且来自 API 的回复不够可靠,无法继续工作。如果预先创建不是一个选项,我想睡眠计时器可能是前进的方向。对我来说,在某些情况下最终是 2-5m。在一些幸运的情况下,7-30 岁


推荐阅读