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

Mar*_*rco 4 authentication powershell service-principal azure-functions powershell-core

我有一个 Azure 函数,用于从 Azure AD 获取数据,但我想限制谁可以使用该函数,因为它将使用 HTTP 触发器,以便我稍后能够从逻辑应用程序调用该函数沿着路。因此,由于 HTTP 触发的 Azure Functions 具有公共终结点,我希望通过将授权级别设置为 Function 来提高安全性,或者更优选使用 Azure AD 服务主体(预先创建)。进行此更改后,我可以通过将函数放入 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
Run Code Online (Sandbox Code Playgroud)

有谁知道这应该如何运作?

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

我在这里查看: 使用 JavaScript 进行 Azure AD 身份验证访问的 Azure 函数

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

PS:这个PS不需要答案,但我会很感激任何想法。我正在炮制的这个东西是一个由(预定的)逻辑应用程序组合而成的工作流程,该应用程序触发Get-Function. 哪里Get-Function需要以某种方式触发Update-Function. 我正在触发Get-FunctionHTTP,以便我也能够将其作为 API 提供,以使该函数可用于自动化。(允许通过 API 调用轮换机密,而无需那些需要 Azure AD 权限的人)更新功能需要在(特定)应用程序/服务主体上轮换机密。Azure Function 基于 v2 并使用 Powershell Core 作为语言。

Sta*_*ong 10

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

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

1

单击保存。一旦该过程完成,请记下您的功能广告应用程序的 client_id,我们稍后将使用它。

2

  1. 创建 Azure AD 应用程序

3

4

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

5

6

  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->
Run Code Online (Sandbox Code Playgroud)

如下:

7

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

8

如果这对您有帮助,请标记我。