在描述我的问题之前,我想澄清一下,我不是Azure专家。如果我说错了什么,请原谅。
我有一个与AAD安全的PowerShell Azure函数。在我的脚本(Az Funciton)中,我可以从请求头中获得accessToken和AccountId:
#Input bindings are passed in via param block.
param($Request, $TriggerMetadata)
$accountId = $Request.Headers['x-ms-client-principal-name']
$accessToken = $Request.Headers['x-ms-token-aad-access-token']
在我的脚本中,我使用Power Shell Az模块,我想用以下命令连接到Azure:
Connect-AzAccount -AccessToken $accessToken -AccountId $accountId
不幸的是,连接到Azure不能正常工作,我得到以下错误:
Unable to acquire token for tenant 'organizations' with error 'Authentication failed.'
我明白这不是正确的accessToken使用。是否有可能拥有正确的AccessToken,因此使用连接- azaccount命令与AccessToken选项?
我想指定PowerShell脚本必须以调用我的Azure函数的用户的身份执行。我的方法是正确的,还是有另一种方法来实现相同的场景?
谢谢你的帮助,Mehdi
我终于对这个问题有了更好的理解。事实上,我缺少一个配置来允许我的令牌考虑Azure服务管理API。
配置可以从https://resources.azure.com/
这是配置使用:
"identityProviders": {
"azureActiveDirectory": {
"enabled": true,
"registration": {
"openIdIssuer": "https://sts.windows.net/e005f490-xxxx-4816-xxxx-b0ed7fa9ad58/",
"clientId": "559740f9-xxxx-xxxx-9015-5b9dd6e595bb",
"clientSecretSettingName": "MICROSOFT_PROVIDER_AUTHENTICATION_SECRET"
},
"login": {
"loginParameters": [
"response_type=code id_token",
"resource=https://management.azure.com"
],
"disableWWWAuthenticate": false
}
...
我强烈推荐这个博客,它真正解释了整个想法:https://blog.bredvid.no/patterns-for-securing-your-azure-functions-2fef634f4020