介绍Power Automate中基于HTTP请求触发的flow并增强其安全性

我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面的微软最有价值专家(Microsoft MVP),欢迎关注我的微信公众号 MSFTDynamics365erLuoYong ,回复411或者20200516可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!

Power Automate中的Flow很多是基于事件触发或者定期触发,今天我们介绍下通过HTTP请求触发的flow。

首先打开 https://flow.microsoft.com ,新建一个 Instance flow,触发器(trigger)为 When an HTTP request is received 。

 

 点击 Use sample payload to generate schema ,在弹出框中我粘贴下请求的示例json文件。

 

 输入后点击 Done 按钮。

 

 然后增加一个步骤,使用Request 这个connector中的 Response 这个action。

 

 返回的内容我设置如下,使用了一个表达式:concat(triggerBody()?['Name'],'你好!') 。

  

保存后就会生成调用该flow的URL,如下示例:

  

然后我用Postman来调用下:

 

 Flow中可以看到运行记录如下:

  

根据 Rik de Koning 的文章 Securing your HTTP Request trigger in Microsoft Flow  ,可以使用类似下面的方法来限定只有某个flow可以调用它。

也就是先看header 是否包括 x-ms-workflow-name 元素,且该元素的值等于 flow的id。

 

 当然还有别的办法,比如使用Key Vault。登录 https://portal.azure.com 创建一个 Key Vault。

 

 创建一个类似如下的secret:

 

 要能读取这个secret的值,需要至少授予连接用户 Secret Permissions 中的 Get权限。

 

 下面我对前面创建的flow添加 Azure Key Vault connector中的Get secret action。

 

 获取指定的secret的值如下:如果连接有问题,可以导航到 Data > Connections 去修复,如果是missing parameter是需要指定Key Vault的名称的。

 

然后的check就根据这个Get secret步骤返回的Value值和请求Header中的元素的值(triggerOutputs()['headers']['secret'])做比较。

 

 下面这样调用,传递的secret的值是正确的就可以正常返回。

  

但是从默认的运行记录中可以看到值:

 

 可以对这个步骤点击 Settings 。

  

将这两个Preview属性(Secure Inputs 和Secure Outputs) 打开。

  

再次添加这个输出参数的值可以看到有锁标识了。

  

再次打开运行记录就看不到明文了, Content not shown due to security configurations. 

 

posted @ 2020-05-16 20:02  微软MVP(15-18)罗勇  阅读(1302)  评论(0编辑  收藏  举报