【发布时间】:2020-10-27 13:51:17
【问题描述】:
我们能否从 Azure VM 对 azure 函数进行 REST API 调用?我们无法存储 API 的用户名和密码。我们可以使用任何其他身份验证来调用 azure 函数吗?例如:托管身份、证书?
【问题讨论】:
标签: azure azure-functions azure-vm
我们能否从 Azure VM 对 azure 函数进行 REST API 调用?我们无法存储 API 的用户名和密码。我们可以使用任何其他身份验证来调用 azure 函数吗?例如:托管身份、证书?
【问题讨论】:
标签: azure azure-functions azure-vm
是的,您可以使用托管身份 (MSI) 获取令牌,然后使用该令牌对您的 Azure 函数进行 REST API 调用,请按照以下步骤操作。
1.在门户中导航到 VM -> Identity -> 启用系统分配的标识。
2.导航到门户中的函数应用 -> Authentication / Authorization -> 使用 Azure AD auth 配置你的函数应用,按照这个 doc,不要忘记设置 Log in with Azure Active Directory ,配置后,它为您的函数应用创建一个 AD 应用需要一段时间,它最终会如下所示。
3.然后在函数应用中,创建一个HTTP触发器进行测试,注意:其Authorization level需要设置为Anonymous。
4.在我的示例中,我RDP进入VM,然后使用powershell获取令牌,然后使用令牌调用函数,根据您的情况,您也可以使用其他语言取决于您的要求。我的函数名称是joyfun111,在脚本中用你的替换它,它对我有用。
$response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://joyfun111.azurewebsites.net' -Method GET -Headers @{Metadata="true"}
$content = $response.Content | ConvertFrom-Json
$Token = $content.access_token
Invoke-RestMethod -Uri 'https://joyfun111.azurewebsites.net/api/HttpTrigger1?name=world' -Method POST -Headers @{Authorization="Bearer $Token"}
更新:
如果是这样,您只需使用功能键和功能网址,将Authorization level更改为Function,禁用Authentication / Authorization中的Azure AD身份验证,然后使用如下命令。
Invoke-RestMethod -Uri 'https://joyfun111.azurewebsites.net/api/HttpTrigger1?code=10X/IKJIeElrCRIxxxxH6A==&name=world' -Method POST -UseBasicParsing
可以在功能页面中获取功能的url。
【讨论】: