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

Powershell 如何使用函数身份验证或Azure AD服务主体对Azure函数进行身份验证,powershell,authentication,azure-functions,powershell-core,service-principal,Powershell,Authentication,Azure Functions,Powershell Core,Service Principal,我有一个Azure函数,我正在使用它从Azure AD获取数据,但我想限制谁可以使用该函数,因为它将使用HTTP触发器,以便稍后我能够从逻辑应用程序调用该函数。 因此,由于HTTP触发的Azure函数有一个公共端点,我希望通过将授权级别设置为Function来提高安全性,或者更可取的做法是使用Azure AD服务主体(预先创建)。 在进行此更改时,我可以通过将函数放入URL来进行调用 基本URL: https://something.com/api/function_name 带有令牌的URL:

我有一个Azure函数,我正在使用它从Azure AD获取数据,但我想限制谁可以使用该函数,因为它将使用HTTP触发器,以便稍后我能够从逻辑应用程序调用该函数。 因此,由于HTTP触发的Azure函数有一个公共端点,我希望通过将授权级别设置为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
有人知道这是怎么回事吗

另一方面,我还可以将
平台功能->身份验证/授权
设置为Azure广告服务主体。但是,如何使用该服务主体的
client\u id
client\u secret
更改URL以进行身份验证? 实际上,我更喜欢使用这种方法,因为这样我就可以对令牌实施生命周期管理,并对其进行轮换,以使其更加安全

我在这里看过:

而我在stackoverflow上发现的大多数其他主题甚至都没有接近

PS:这个PS不需要回答,但我很感激你的任何想法。 我正在炮制的这个东西是一个工作流,它结合了一个(计划的)逻辑应用程序,触发一个
Get函数
。其中,
Get函数
需要触发一个
Update函数
。我正在使
Get函数
HTTP被触发,这样我也可以将它作为API提供,使这个函数可以用于自动化。(允许通过API调用旋转机密,而无需那些需要Azure AD权限的人) 然后,更新功能需要在(特定)应用程序/服务主体上轮换机密。
Azure函数基于v2,并使用Powershell Core作为语言。

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

  • 启用身份验证/授权(轻松身份验证),使用Azure AD express模式:
  • 单击保存。一旦过程完成,请注意你的功能广告应用程序的客户端id,我们将稍后使用它

  • 创建Azure广告应用程序
  • 为其创建客户端密码,请注意客户端密码值和新的Azure AD应用程序ID:

  • 请求从您的Azure AD获取访问令牌,以便我们可以调用您的http触发函数:
  • 请求URL:
    邮递https://login.microsoftonline.com//oauth2/token
    请求标头:
    内容类型:application/x-www-form-urlencoded
    请求机构:
    授予\类型=客户端\凭据
    &资源=
    &客户识别码=
    &客户机密=
    
    如下:

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


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

    我找到了函数auth误解的答案:对于需要传递到代码中的每个新查询,它只是一个简单的¶meter=value¶meter=value。剩下的是azure ad服务主体身份验证Hi,Marco,所以你想知道如何使用azure ad通过平台功能->身份验证/授权方式来保护你的功能应用,对吗?只有通过Azure ad Auth的请求才能调用你的函数应用程序?你好,斯坦,最好是。我已经知道如何配置这些设置。就在调用URL时,它似乎在询问我的用户凭据。所以基本上只是想知道我应该如何使用clientid&secret进行身份验证。嘿,斯坦,这至少可以部分地让我达到目的。我已经完成了第一步和第二步。3让我走得更远:)那个请求URL就是我要找的。你从哪儿弄来的?另外,在邮递员之外,我将如何执行此令牌请求?这是所有的手动测试,我会看到肯定。所以谢谢你!你是否也知道我是如何通过编程来实现这一点的?我假设它基本上是URL的某种格式?请注意,这些都是在powershell中编写的。像这样吗?:嗨@Marco,这是Azure广告的OAuth 2.0服务对服务呼叫验证流,这是关于它的官方文档:,如果你有任何不清楚的地方,请随时告诉我:)谢谢!你让我大获全胜,我想我一定能想出编程访问的部分。:)欢迎希望你有一个愉快的一天!这很好,但我最终得到了401。我不清楚为应用程序
    testAuth
    获取令牌的客户端如何访问由应用程序stanfuntest001保护的资源。我不认为这两者之间有任何关系,我相信这就是401错误的原因。你错过什么了吗?还是我遗漏了什么?
    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->