介绍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.