通过重复运行的Microsoft Flow由OAuth认证后获取Access Token并将其更新到实体记录
我是微软Dynamcis 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面的微软最有价值专家(Microsoft MVP),欢迎关注我的微信公众号 MSFTDynamics365erLuoYong ,回复341或者20190603可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!
Dynamics 365支持OAuth认证,我前面已经写过几篇文章了,这次我将 利用Fiddler模拟通过Dynamics 365的OAuth 2 Client Credentials认证后调用Web API 文章的方法用Microsoft Flow来实现。
登录 https://flow.microsoft.com 后,点击左边的 【My flows】 导航项,再点击右边的 【New】 > 【Scheduled - from blank】。

在出来的窗口中为Flow设置好名称,我这里设置为Repeat every 50 Minute,也就是每隔50分钟运行一次,因为获取到的Access Token默认有效期是1个小时。然后点击【Create】按钮。

在界面点击【+ New step】按钮。

我这里输入 HTTP来筛选,在筛选结果中选择第一个HTTP。

我这里设置该请求的属性如下,请求的URI和内容的说明,返回内容说明请参考我的博文:利用Fiddler模拟通过Dynamics 365的OAuth 2 Client Credentials认证后调用Web API 。

一般应该为步骤起个合适的名字,方法是点击步骤旁边的更多命令图标,点击 【Rename】,我这里更新为【Get Dynamics 365 Access Token】,这个名字后面的步骤中我会用到。


我这里将获取到的access token存入实体 Access Token的Name为 LuoYong_Demo_App 的记录中。首先我需要查出这条记录,然后更新它。
我继续添加一个步骤,使用Common Data Service进行筛选,选择 【List records】这种步骤。

我设置 Environment为 (Current) ,这个方便进行不同环境之前迁移,记得自己在新建Microsoft Flow的时候选择好合适的Environment。Enity Name选择合适的,然后点击【Show advanced options】

查询记录当然需要设置查询条件,也就是OData语法,设置到【Filter Query】这个字段旁,我这里设置的是 new_name eq 'LuoYong_Demo_App' ,Top Count我这里设置为1,因为我只需要找到符合记录的第一条即可,然后我将这个步骤重命名为【Get Access Token Records】。

然后再新增一个Common Data Service类别下面的【Update a record】步骤。

Environment还是设置为 (Current),Entity Name设置为要更新的实体,Record identifier就是要更新记录的主键(Guid),这个值应该是前面步骤【Get Access Token Records】 查询到的记录集中的第一条记录的new_accesstokenid字段的值,这里利用表达式来设置,点击字段值后,在右边的弹出框中切换到 Expression,输入 body('Get_Access_Token_Records')['value'][0]['new_accesstokenid'] 然后点击OK按钮。

再点击【Show advanced options】按钮设置要更新字段的值,以类似的方法设置设置Access Token字段的值为表达式: body('Get_Dynamics_365_Access_Token')['access_token'] ,

继续以类似方法为【Valid To Datetime】字段值设置为表达式 addHours(utcNow(),1) 。

设置好了以后这个步骤的设置如下:

然后点击【Save】按钮保存该Microsoft Flow,最后这个Flow如下:

然后我们来测试下,点击【Test】。

选择【I'll perform the trigger action】,然后点击【Save & Test】。

在弹出窗口中点击【Run flow】按钮。

在提示成功框中点击【See flow run activity】查看运行记录。

运行报错:

是获取access token步骤报错,报错信息如下:
{"error":"invalid_request","error_description":"AADSTS900144: The request body must contain the following parameter: 'grant_type'.\r\nTrace ID: ccb315ef-4fbb-4c3b-ad40-825dfd7c4a00\r\nCorrelation ID: 8cce0977-0d45-43cb-a0ba-9b911bd949e1\r\nTimestamp: 2019-06-03 11:07:29Z","error_codes":[900144],"timestamp":"2019-06-03 11:07:29Z","trace_id":"ccb315ef-4fbb-4c3b-ad40-825dfd7c4a00","correlation_id":"8cce0977-0d45-43cb-a0ba-9b911bd949e1"}
怎么办?可以看到请求的内容和返回,我发现是请求时候,默认请求的Content-Type是application/json,但实际上我这个请求并不是,所以需要自己赋值来覆盖默认值。
修改下这个步骤添加一个名称为Content-Type的Header,其值为 application/x-www-form-urlencoded 。

然后运行,成功。

然后我去Dynamics 365中看下:

当然我也验证了这个access token是否有效,是有效的。

你可能还会问,如果我不通过这种方式,可以直接发起HTTP请求,自带验证方式来直接调用Dynamics 365 Customer Engagement的Web API吗?答案是可以的,我这么设置,注意【Authentication】选择【Active Directory OAuth】,然后设置相应字段的值类似如下。

通过重复运行的Microsoft Flow由OAuth认证后获取Access Token并将其更新到实体记录的更多相关文章
- Dynamics 365触发Microsoft Flow自动生成PDF并作为附件送邮件
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- 【Azure Developer】使用 Microsoft Authentication Libraries (MSAL) 如何来获取Token呢 (通过用户名和密码方式获取Access Token)
问题描述 在上一篇博文<[Azure Developer]使用 adal4j(Azure Active Directory authentication library for Java)如何来 ...
- Web API与OAuth:既生access token,何生refresh token
在前一篇博文中,我们基于 ASP.NET Web API 与 OWIN OAuth 以 Resource Owner Password Credentials Grant 的授权方式( grant_t ...
- 基于DotNetOpenAuth的OAuth实现示例代码: 获取access token
1. 场景 根据OAuth 2.0规范,该场景发生于下面的流程图中的(D)(E)节点,根据已经得到的authorization code获取access token. 2. 实现环境 DotNetOp ...
- ASP.NET OAuth:access token的加密解密,client secret与refresh token的生成
在 ASP.NET OWIN OAuth(Microsoft.Owin.Security.OAuth)中,access token 的默认加密方法是: 1) System.Security.Crypt ...
- Microsoft Flow 概览
作者:陈希章 发表于 2017年12月15日 前言 纵观一下我们周围的世界,以及我们每天忙忙碌碌的工作,你会"惊奇地"发现它们都是一个事件接着一个事件发生的.例如,我每天早上起来, ...
- Android OAuth认证
OAuth认证 为了安全地访问在线服务,用户需要在服务上进行身份验证,即要提供他们的身份的证明.对于一个要访问第三方服务的程序来说,安全问题甚至更复杂.不仅仅是用户需要在访问服务前要进行身份验证,而且 ...
- OAuth认证协议原理分析及同步消息到Twitter和Facebook使用方法
OAuth有什么用?为什么要使用OAuth? twitter或豆瓣用户一定会发现,有时候,在别的网站,点登录后转到 twitter登录,之后转回原网站,你会发现你已经登录此网站了,这种网站就是这个效果 ...
- oAuth 认证
这段时间公司开发项目用到oAuth2协议,现在做一下梳理. CORS即Cross Origin Resouce Share,跨域资源共享:是W3C为防止脚本攻击,而制定的安全标准之一,它云溪浏览器向跨 ...
随机推荐
- Python中的常见特殊方法—— repr方法
在Python中有些方法名.属性名的前后都添加了双下划线,这种方法.属性通常都属于Python的特殊方法和特殊属性,开发者可以通过重写这些方法或者直接调用这些方法来实现特殊的功能.其实前面见过的构造方 ...
- 清新淡雅教育教学工作课件PPT模板
模板来源:http://ppt.dede58.com/jiaoxuekejian/26240.html
- Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
Bootstrap时间日历插件bootstrap-datetimepicker配置与应用小结 by:授客 QQ:1033553122 1. 测试环境 win7 JQuery-3.2.1.min ...
- Android8.1 源码修改之通过黑名单屏蔽系统短信功能和来电功能
前言 之前写过一篇Android6.0 的屏蔽系统短信功能和来电功能,具体看这里 同样的最近有个新需求,需要将8.1 设备的来电功能和短信功能都屏蔽掉,特殊产品就是特殊定制,那就开始吧. 屏蔽短信功能 ...
- 未能找到元数据文件**.dll解决办法
解决方案里有很多项目.生成时提示100多个错误,都是未能找到元数据文件**.dll. 那就清理一下解决方案,一个一个来吧. 生成GateWay.Utilities项目时,虽然提示成功了,却发现bin/ ...
- 网络编程~~~osi五层协议
物理层 / 数据链路层 / 网络层 / 传输层 / 应用层(表示层/会话层) 一 物理层 物理层指的就是网线,光纤, 双绞线等物理传输介质 物理层发送的是数据(比特流) 二 数据链路层 数据链路层对数 ...
- Unity如何更改精灵中心点
Unity虽然可以改中心点但是仅支持几个特定位置. 如果是一个你是切割的精灵,则可以进入精灵编辑器中调整 打开精灵编辑器后按调整如下图所示的pivot选项,我在这里把精灵调整成了右上. 在精灵编辑 ...
- 201777010217-金云馨《面向对象程序设计(Java)》第二周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- windows下配置ngnix服务器经常出现503问题解决办法
自己网站在windows server2008下安装的ngnix,然后配置php,网站访问流量并不大,但是经常出现503问题.经过查看ngnix服务器错误日志,发现: (10061: No conne ...
- 创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值
1.创建组件的方法 函数组件 class组件 1.1 函数组 无状态函数式组件形式上表现为一个只带有一个 `render()` 方法的组件类,通过函数形式或者 `ES6` 箭头 `functi ...