我最近遇到了一个问题,结果发现是由过期的服务主体凭据引起的。我希望有一种简单的方法来获取所有到期日期/过期的 sp 凭据的列表,以避免将来出现此问题。我一直在查看 odata 和 jsonpath 文档,但总是出现错误。
目前我可以在 AZ CLI 中运行此命令:
az ad sp list --all --query "[*].[appId]" -o tsv | xargs -I 1 az ad sp credential list --id 1 --query "[].endDate" > end.txt
这将生成一个 json 数组或所有endDate
s,但是它不会保存appId
与 相对应的endDate
,并且对于没有任何凭据的服务主体,会在终端中打印如下错误消息:
ERROR: Can't find associated application id from '00000000-0000-0000-0000-000000000000'
有 2 件事我想解决。1 :通过仅获取具有 的
来避免ERROR
上述消息。我尝试添加过滤器来实现此目的:appId
oauth2Permissions
any()
az ad sp list --all --filter "oauth2permissions/any()" --query "[*].[appId]" -o tsv | xargs -I 1 az ad sp credential list --id 1 --query "[].endDate" > end.txt
但是我尝试过的这个和其他的变化都会导致错误或状态Collection open properties are not supported in this release.
什么是正确/最好的方法?
2:为了利用输出结束日期,我希望 endDate 附带一些有关 SP 的信息,至少是。因此,我希望元素是类似于以下的字典,appId
而不仅仅是列表元素:["2021-05-27T15:39:26.667907+00:00"]
[
{
"appId": "00000000-0000-0000-0000-000000000000"
"endDate": "2021-05-27T15:39:26.667907+00:00"
}
]
如果凭证本身有该appId
字段,那么这将很简单,但凭证本身没有。我该如何向输出添加信息?
除了分别解决这两个问题之外,是否有其他工具/解决方案可以在单个命令中提供类似的最终输出?
答案1
微软最近发布了一些可以帮助查找过期凭据/证书的 PS 脚本。链接如下:https://docs.microsoft.com/en-us/azure/active-directory/manage-apps/app-management-powershell-samples
答案2
我最近遇到了一个问题,结果发现是由于服务主体凭证过期引起的。
几天前我遇到了类似的问题,并以不同的方式解决了它,但与您尝试实现的解决方案非常相似(我认为)。
为了解决您描述的两个问题,我最终得到了这个(不是最优雅的,但运行良好):
az ad sp list --all --output tsv \
--query "[? publisherName=='<COMPANY_DOMAIN>' && oauth2Permissions[0]!=null].[appId]" \
| xargs -I 1 bash -c "eval az ad sp credential list \
--id 1 --output json --query "[].\{endDate:endDate\}" \
| jq '. | select(. | . != []) | .[] += {\"appId\": \"1\"}'"
- 应该
[? publisherName=='<COMPANY_DOMAIN>' && oauth2Permissions[0]!=null]
解决这些问题can't find associated application id
和collection open properties are not supported in this release
错误。 - 将会
+= {\"appId\": \"1\"}
把附加appId
到列表中,并1
用正确的值替换(来自 xargs)。
我希望这有帮助。