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

时间:2019-08-21 08:04:02

标签: powershell authentication azure-functions powershell-core service-principal

我有一个Azure函数,正在使用该函数从Azure AD中获取数据,但是我想限制谁可以使用该函数,因为它将使用HTTP触发器,这样我就可以从Logic App后来问世。 因此,由于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

有人知道这应该如何工作吗?

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

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

我在stackoverflow上发现的大多数其他主题甚至都没有结束。

PS:本PS不需要答案,但我会很感激。 我正在构想的事情是由(预定的)逻辑应用程序触发的Get-Function组合的工作流程。 Get-Function将在何处需要触发Update-Function。而且我正在触发Get-Function HTTP,因此我也能够将其作为API提供,以使该功能可用于自动化。 (以允许通过API调用旋转机密,而无需那些需要Azure AD权限的人) 然后,更新功能将需要旋转(特定)应用程序/服务主体上的机密。 Azure Function基于v2,并使用Powershell Core作为语言。

1 个答案:

答案 0 :(得分:0)

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

  1. 启用身份验证/授权(简易身份验证),请使用Azure AD表达模式: enter image description here 点击保存。完成此过程后,请注意您的功能广告应用程序的client_id,稍后我们将使用它。 enter image description here
  2. 创建Azure AD应用 enter image description here enter image description here ,并为其创建客户端密钥,记下客户端密钥值和新的Azure AD应用ID: enter image description here enter image description here

3。提出从您的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->

仅如下所示: enter image description here

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

enter image description here

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