powershell - 等待 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 分钟。取决于功能是否从冷启动启动。
- 我应该使用循环来检查 Powershell 脚本中的 AD 应用程序信息吗?
- 我应该使用作业线程和等待作业 cmdlet 吗?
- 也许睡一会?
只需在此处寻找最佳方法,以确保在尝试使用 ADAL 库进行身份验证之前 100% 添加新的回调 url。
任何帮助都会很棒!
解决方案
这不是一个有解决方案的答案。但我想我正在阅读一些我曾多次体验过的东西。
我一直在使用 python 和 Hashicorp vault 来尝试管理应用程序上的令牌/RBAC。但它经常会因为它尚未更新而中断,因为从 AAD 到后端的传播与我被告知的异步。
我什至检查了我在哪里使用 ADAL 来循环应用程序以验证它是否良好。但即便如此,它在某些情况下仍然会失败。这损害了我试图实施的自动化。
现在您遇到了一些看起来相似的问题,而是在将回复 url 添加到现有应用程序时。我的测试问题是;在创建应用程序时提供回复 URL 是否有效?如果是这样,并且测试是 100%,那么您遇到了同样的问题。
对我来说,在应用程序上预先创建所有必要的属性是帮助我绕过这个烦人的问题的原因。因为我不认为在任何地方添加睡眠是前进的好方法,而且来自 API 的回复不够可靠,无法继续工作。如果预先创建不是一个选项,我想睡眠计时器可能是前进的方向。对我来说,在某些情况下最终是 2-5m。在一些幸运的情况下,7-30 岁
推荐阅读
- php - 如何修复 php mysqli_multi_query 上不同步的命令?
- docker - Docker Swarm 上的 NGINX 在同一个端口上服务多个应用程序
- kubernetes - centOS7 无法启动 minikube
- r - 如何在包中导入tibble
- node.js - 请求 Nodejs 代理请求(帖子)
- asp.net-core - 为什么我需要在启动配置中的 UseSpa 之前调用 UseSignalR
- bash - 使用 xargs rmvirtualenv 删除所有虚拟环境
- r - 是否可以在 R 中自动命名?
- r - 分析推文时的streamR字符问题
- android - 当我放“play-services-ads”时,实现 'com.android.support:appcompat-v7:27.1.1' 出错