如何使用函数身份验证或 Azure AD 服务主体对 Azure 函数进行身份验证

How to authenticate to an Azure Function using function auth or Azure AD service principal

我有一个 Azure 函数,我正在使用它从 Azure AD 获取数据,但我想限制谁可以使用该函数,因为它将使用 HTTP 触发器,以便我能够调用该函数从稍后的逻辑应用程序中。 因此,由于 HTTP 触发的 Azure Functions 有一个 public 端点,我想通过将授权级别设置为 Function 来提高安全性,或者更可取的是使用 Azure AD 服务主体(预先创建)。 进行此更改后,我可以通过将函数放入 URL.

来进行调用

基地URL: https://something.com/api/function_name

URL 带令牌: https://something.com/api/function_name?code=token_here

但是,我的函数需要一些输入。 在匿名端点上,您可以像这样扩展基础 URL : https://something.com/api/function_name/?parameter=value

其中参数是代码所期望的,以及在代码中传递给变量的值。 现在我是这个 HTTP 端点的新手,并通过 URL 传递值。我知道这是作为 JSON (可能)

传递的

但是我不明白怎么既能授权功能又能传入参数。 我试过:

https://something.com/api/function_name/?parameter=value?code=token_here
https://something.com/api/function_name?code=token_here/?parameter=value

有人知道这是怎么回事吗?

另一方面,我还可以将 Platform Features -> Authentication / Authorization 设置为 Azure AD 服务主体。但是,我该如何更改 URL 以使用该服务主体的 client_idclient_secret 进行身份验证? 我实际上更喜欢使用这种方法,因为这样我就可以对令牌实施生命周期管理并轮换它以使其更加安全。

我看过这里: Azure function with Azure AD authentication access using JavaScript

我在 Whosebug 上找到的大多数其他主题甚至都没有接近。

PS:这个 PS 不需要回答,但如果有任何想法,我将不胜感激。 我正在编造的这个东西是一个工作流程,它结合了一个触发 Get-Function 的(预定)逻辑应用程序。其中 Get-Function 将以某种方式需要触发 Update-Function。我正在触发 Get-Function HTTP,这样我也可以将其作为 API 提供,使该功能可用于自动化。 (允许通过 API 调用轮换机密,而无需那些需要 Azure AD 权限的人) 然后,更新功能需要在(特定的)applications/service 主体上轮换秘密。 Azure Function 基于 v2 并使用 Powershell Core 作为语言。

如果您想使用平台功能->认证/授权(Easy Auth)来保护您的匿名http触发功能,您可以按照以下步骤操作:

  1. 启用身份验证/授权(Easy Auth),使用 Azure AD 快速模式:

点击保存。完成该过程后,请注意您的功能广告应用程序的client_id,我们稍后将使用它。

  1. 创建 Azure AD 应用程序

为其创建客户端密码,记下客户端密码值和新的 Azure AD 应用程序 ID:

  1. 请求从您的 Azure AD 获取访问令牌,以便我们可以调用您的 http 触发函数:
Request URL:
POST https://login.microsoftonline.com/<-your tenant id/name->/oauth2/token

Request Header:
Content-Type: application/x-www-form-urlencoded

Request Body:
grant_type=client_credentials
&resource=<-function App ID->
&client_id=<-new Azure AD App ID->
&client_secret=<-client secret of new Azure AD App ID->

如下:

正如您在响应中看到的那样,您可以获得一个访问令牌,因此在 http 请求中使用此令牌 header Authorization 参数来调用您的 http 触发函数,该函数启用了简单的身份验证,所有请求没有正确的授权 header 将被阻止:

如果对你有帮助请点个赞