微软动态CRM专家罗勇 ,回复330或者20190504可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!

根据官方建议,不要再使用Dynamics 365 Customer Engagement的SOAP终结点,也就是组织服务,而应该使用Web API. 那么Web API如何通过认证呢?这就是本文要讲的内容.

本文使用的Dynamics 365 Customer Engagement 版本 1612 (9.0.3.7) (DB 9.0.3.7) (本地),服务器操作系统是Windows Server 2016 Datacenter,特别说明的是Windows Server 2016以前的版本是不支持的,本文主要是 HOW TO DO A DYNAMICS 365 WEB API REQUEST USING OAUTH2 ACCESS TOKEN RETRIEVED FROM ADFS 2016 文章的内容的翻译与实践,也加上了自己的探索与思考.

首先打开 AD FS Management,选中左边的 Application Groups,然后点击右边的 Add Application Group ... 这个Action。

新建Application Group的名字我这里设置为 OAuth 2 Server Application,Template请选择 【Server Application accessing a web API】。

添加一个Redirect URI,记下这个页面的 Client Identifier 备用。

在下一步的界面中选中 【Generate a shared secret】,将自动生成后的secret复制下来备用,也就是点击旁边的 【Copy to clipboard】按钮,再点击【Next】按钮。

在Identifier中输入【https://demo.luoyong.me/api/data/v9.0/】然后点击旁边的【Add】按钮,再点击【Next】按钮。

这个页面保持不变,直接点击【Next】按钮。

默认情况下这里只选中了 【openid】,保持不变点击【Next】按钮。

创建完成后还需要修改其属性,双击,选择 Web API那个条目,然后点击【Edit】按钮。

切换到【Issuance Transform Rules】这个Tabpage,点击【Add Rule...】按钮,添加如后图所示的三个rule。

第一个rule如下:

添加的第二个rule如下:

添加的第三个rule如下:

然后就可以用来获取Access Token了,根据 Password Grant 的请求说明,我这里先用Fiddler来模拟,发起一个POST请求到 https://demo.luoyong.me:444/adfs/oauth2/token ,grant_type=password&client_id=06e7a1c2-f0e5-4782-a801-32ef21c7abf1&client_secret=Wf87BDgy9G1-_FidM_upf08KkfNoZb7D-SuXR7eH&username=crmadmin%40luoyong.me&password=Pass%40wordXXXXXX&resource=https%3A%2F%2Fdemo.luoyong.me%2Fapi%2Fdata%2Fv9.0%2F 。

请求返回的内容是JSON格式如下:

{
    "access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IlRMUW52dDNxa2YtYVNIVDFkV0t0bkFMLUZGQSJ9.eyJhdWQiOiJodHRwczovL2RlbW8ubHVveW9uZy5tZS9hcGkvZGF0YS92OS4wLyIsImlzcyI6Imh0dHA6Ly9kZW1vLmx1b3lvbmcubWUvYWRmcy9zZXJ2aWNlcy90cnVzdCIsImlhdCI6MTU2MTI2MjY2NSwiZXhwIjoxNTYxMjY2MjY1LCJ1cG4iOiJjcm1hZG1pbkBsdW95b25nLm1lIiwicHJpbWFyeXNpZCI6IlMtMS01LTIxLTMwNTg2MDQxMDktMjU4NzIzMTYtMTIyNjc2ODE3NS01MDAiLCJ1bmlxdWVfbmFtZSI6IkxVT1lPTkdcXGNybWFkbWluIiwiYXBwdHlwZSI6IkNvbmZpZGVudGlhbCIsImFwcGlkIjoiMDZlN2ExYzItZjBlNS00NzgyLWE4MDEtMzJlZjIxYzdhYmYxIiwiYXV0aG1ldGhvZCI6InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphYzpjbGFzc2VzOlBhc3N3b3JkUHJvdGVjdGVkVHJhbnNwb3J0IiwiYXV0aF90aW1lIjoiMjAxOS0wNi0yM1QwNDowNDoyNS4xOTVaIiwidmVyIjoiMS4wIn0.MPLyid3G26pKnZnoWuoIcZ9wCRNION1Ks4th90ul8KSeU0ZXQ491VBZfqbdww7du_l8nM-EvUsUMDHxp-HpgPb_YVqMSzEVhl13qmmXr1vAApBqISV7JUnsZe9E2bDN4pbty8kIjBnFgV-BM6SYlBwGEK6WCbZcCVorSE8sz6Q_HD80AFKiWvop9bHT5UU-jupFSn7nvCCuQinw1Co1ipBCEWL3iJS3v-umLPyy-Scmiyh2eVywAt3o8lfRGgr1rTcpQWlPOO36vPVQ9yN2j2EwnoPo-XJuIpIsb66CqyhAarZyMgnCidddps-YB_kx2kR0THX3AbURLVuS1VSeAFw",
    "token_type":"bearer",
    "expires_in":3600,
    "resource":"https://demo.luoyong.me/api/data/v9.0/",
    "refresh_token":"IpaVCVc-VCTx4P3bfnORIOFTai8E4eWGKlz4QsxpQnsAAQAAEVgUKdY2COgdNh7QF5tUdUerc1QeRtyCVwjkRuc9XsDoBC-k0In7NrvywbKLCOGAqavKh2NYUDuw-HqJgwpXXg5PdV7MMOTfsIuOjBlG3qGgYrm64MH6sNtHGIbGqZbEML5MFTD2OjjdK4cL2KTMy8Pr_pfPmrS6yOGYPu409EzBn9qkoRhBiR0UzEssOYT0kvmQAwSz5PUnoPsKp3DwPpRRW7Gy0Ww0GGDYYhDYKXgj1Yf2-MYnJCqryt8XD3t5yx9IgjJDEjv8kzApDGzIi6Bd1365ddtVMtvd_z2AwNeG3dA8kBREgrnAgtYwd3Zl8t9UeLfMLD-CLGkpDmm0DwAGAAA5i-4WbFH6mSgAoTYdW8-RdJICj1ojXFzBESwb5wcKLtWzJdthM8Cqs6CNC93_hPWBGu-zq3ygJgsgQluhsEItx7wDG7_jBH_Vp95_jWpCRZFJOAkj8da2yQSSxasjJAqK88yXANDn5LbuqQ08Rh5nK952zERlCX9uqNtig3E--fKUEk1v9r4I_Rz6wxxH_DY2TxvbVqlTwWG2M-dNS56yYJnSltUXY9rpPVpA5Pqkt9tyCJbKcmryCLSn276jeHd1iGFo6OJHwqoKQDHJypglBtUtkhtSOgbJLq1PU40lyjIduzatrnvCjzdewx921CWldFuAq2Z1s-n19I-OmVeb7RrtNxsKMP2MLQGLg9SXFutAAuO5UcigA7swqESVs0dM8cYz2okokL87fTcWpaWJSVKiR0s2ms6WtW2akmQN67fRGhg9MqoxGLsnh50TwpL5Est9MNKa-c7dllMCvXOR6xeUZmHVdE4Sd3DveuwyDruCJp8Ca0y5ozxy6IS8OcbBRnF3_PGuC9eg5zQnsvysJV5BJttfKJUd3_cWa5zWtnV896eEeXO-8m3PhTAdAeazQy_BB4ohs_-IqTSjZcScX57oTNLJ5i-8WCQtB85nk44yljsEuToeEwHuVhP7z7VDc3CUu0m__-ojA_GAqukN7ySiTPh9XM4AivGtY7j_SqcecD4i219vm7IRikbM3EqGyb5-R6pFsHaaUvh940dg_RAxAqmzBJn82AbTUUkqUtTuLig9VV1U52C9Xzk1cKOjdlbae4P1Snyn_ADK2QVv4C_8L8YCWZssbYBP1uG9WjsUmGNVlUVkAnUhSAp12uVfD_5sYt2peIBfDWO_4c9Lr2nsfXW8igNYa0Ex7-nVk5bQIhSWbRqPGTF6rMFtuJnH80WARIHxL3oWfuzDC9w8e-vObn890fTYuoizubfD4QIHOQZidYhc9o9gmWRfec_hbXBZfBoG6Euw58jdluwHvtfo1LxylLPK7AfGPvbl0Yd1pcOX-y8CfmoVZrkLGAkjGQ9zkmnBTUkNmp9UYAUU5XzMcxqNnZDN-uYgvnT-XK9mxNh_KYuevljS52RlgV4oTwO_PfkVeNtEahbuv6uAfwCR_XRVhR3GPINNnmrsf9IsMq3nwQlamXcKWKug2vXfZk4qZ3b9TBLhEcm4b_f952cfbXuF35AC06hE3TCqSMnqEQYE_5ngJ4ExI4-2bkK3lJz5Fm0iZNJNpOmNnc_hEK229BoqATlhQGDmaaZIURUw-i86xrUNmWltFSlbhUxDkwOTLq8r7Q8yr1hkCG8qzEKOgGipVj8smb8vmd6_udSVTANUViANbj5kpbRZOeepp4Y6YgfdjOKjzZjOTF0JqH7WK8mjzSv8Mx2NS1sAlpD3bxJLxZI9PTwDmAc-dTCwWNalVLiOlezTXeF3dGIiHNf4sfW2i4oGPaUL1i8Apfa1rmDAS-xqxZhZUHJ7s13a8pXhfNMCzjJAkhisJYSCxpxBMQvQ7ZA0DgOXZr6HP7BkSIhUzrQnl7x07Hue9HnSTKnO2nC2hihmbluFvFEB_rL0l3MtT_IJZkTKoZHcUeehyrbS9aiS9jG2sprOtp-AyFwv8CXjF0fBPKRC_VcX0zj-Vpr_QLnGqLtWDsPZynK_-kxuGS_AwG08YHQ6VGI2_qJ2S5d7TqxO3G72fl2-4RpA6FL5BHcFZeEQOGtKWMe6ErhRsYJ243_iwmzm5Q_Uzix9YeF9Rg7OzZpMj1l0L9NEskuyBfxdtH720NZacp7Wtafl2v08jyfAG0HtRBUlFLghjmGEXpoZ-bstO0Wa-7bKB-3PIjNaHj9NnLNQOcrgrbXOfPceDf-T0GlEwL6Wtbvw9fy2GwJZW2RgxnKO5uk-wleJzuqwNQ2AZGjyzniFwl9z67V61wLaSCK8HQtLbwQLZCX5d94fRGwQ5ZDiAqO8NtVNm7H7opRUaA0OzperiR_Eu_FD3QaF7s7KUV6oTSBeCMcoEIm2wLFHY7AI2DDm-jNkS8dCQ8UAKQqiWhZxIrhIYIyPO5tLVT9bXQI.GUvzkNLUD-GrSwBoCYDQIcLuwY2qGnqGuDAuhbfkid1DKK5p3Jk--shF-dNimJuLzfC29poRc7fRiH85xC8LQkuSjQc2_3pmKcwMGMTg4ypt3vrIfmbfANBh_qTa4sU456QbPCViSGdp4dnELkzq9b1y21CYRkKXrqe1BYsEqGKiq-0o3NexQEB2woTddo_Z6j2WE6Dfn9bda6O8Dq-83qFRyfVAMM8LknZn5WPRhCcoR7b5zsa1g52wyyLtAGkJqRmVnBdJa0wvM0Tc9iQwo-5FnBBoGDNBIbtYspMjhQeGhOiQe6Bq2FUivJ4zxYcbIYDpvZBvQBovQUgQP_rLDw",
    "refresh_token_expires_in":28800,
    "id_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IlRMUW52dDNxa2YtYVNIVDFkV0t0bkFMLUZGQSIsImtpZCI6IlRMUW52dDNxa2YtYVNIVDFkV0t0bkFMLUZGQSJ9.eyJhdWQiOiIwNmU3YTFjMi1mMGU1LTQ3ODItYTgwMS0zMmVmMjFjN2FiZjEiLCJpc3MiOiJodHRwczovL2RlbW8ubHVveW9uZy5tZS9hZGZzIiwiaWF0IjoxNTYxMjYyNjY1LCJleHAiOjE1NjEyNjYyNjUsImF1dGhfdGltZSI6MTU2MTI2MjY2NSwic3ViIjoibERQeWlZdGV5elhXLzRaYlRXTHJCTGtjNG1MWS9jbE9Tb1cwSkVrTzIxQT0iLCJwd2RfZXhwIjoiMzM2NzQ2OSIsInNpZCI6IlMtMS01LTIxLTMwNTg2MDQxMDktMjU4NzIzMTYtMTIyNjc2ODE3NS01MDAiLCJ1cG4iOiJjcm1hZG1pbkBsdW95b25nLm1lIiwidW5pcXVlX25hbWUiOiJMVU9ZT05HXFxjcm1hZG1pbiIsInByaW1hcnlzaWQiOiJTLTEtNS0yMS0zMDU4NjA0MTA5LTI1ODcyMzE2LTEyMjY3NjgxNzUtNTAwIiwiYXBwdHlwZSI6IkNvbmZpZGVudGlhbCIsImFwcGlkIjoiMDZlN2ExYzItZjBlNS00NzgyLWE4MDEtMzJlZjIxYzdhYmYxIiwiYXV0aG1ldGhvZCI6InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphYzpjbGFzc2VzOlBhc3N3b3JkUHJvdGVjdGVkVHJhbnNwb3J0IiwidmVyIjoiMS4wIn0.jFIqKwAlr1xDVoREAggQPfgGEupiqLo4Ns8wrYwu8AANB0gGZTZsSdR-j0_VvUaaT8ZFLoOCBGcefDvAE_8x8MldAqlVVipBZOcn_uZFR00v5ZulT1jU2JRv7Bilq78RhaQVS4WxU0U7IAHogJ35yB0aAaqq524k_aWrqajXhK1bIf1Ywz529YY8rhoB_PT4Xa7Ne8xICUtd1ljycmzBVUlODSMMhKRhMvWR-VPeiPvhaZ2jUixJS-3AOWdRvNmGozoQVJLn5B3IqmV3NJj6OEqkbij9RLYoPFmBGcN-ibVhJQcARUesJiNyK_vEpGzH48Dcma9j1zCASRRpbj24vw"
}

将这个acccess_token的内容放到 https://jwt.io/ 去解析,可以看到详情如下图:

然后我就可以用这个access token去调用Dynamics 365 Customer Engagement 的Web API了,可以看到调用成功:

Dynamics 365本地部署版本配置OAuth 2 Password Grant以调用Web API的更多相关文章

  1. 为Dynamics 365启用部署级的跟踪以及跟踪文件的定期删除

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复260或者20170712可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...

  2. 利用Fiddler模拟通过Dynamics 365的OAuth 2 Client Credentials认证后调用Web API

    微软动态CRM专家罗勇 ,回复337或者20190521可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me. 配置Dynamics 365 & PowerApps 支 ...

  3. Dynamics Customer Engagement V9版本配置面向Internet的部署时候下一步按钮不可点击的解决办法

    微软动态CRM专家罗勇 ,回复299或者20190120可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . Dynamics 3 ...

  4. Dynamics 365 CRM 部署 Connected Field Service

    微软 Connected Field Service 是一个提供Azure IoT 和 Dynamics 365 连接的这样一个框架 有两种方式部署CFS, 一种是用IoT Hub PaaS, 一种是 ...

  5. Dynamics 365 Online通过OAuth 2 Client Credential授权(Server-to-Server Authentication)后调用Web API

    微软动态CRM专家罗勇 ,回复332或者20190505可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me! 本文很多内容来自 John Towgood 撰写的Dynamic ...

  6. 工程师技术(三):独立Web站点的快速部署、虚拟Web主机的部署、配置网页内容访问、使用自定Web根目录、配置安全Web服务、部署并测试WSGI站点

    一.独立Web站点的快速部署 目标: 本例要求为 http://server0.example.com 配置Web站点,要求如下: 1> 从http://classroom/pub/materi ...

  7. Ajax跨域Post方法调用Web Api(NuGet配置的环境)

    没安装的去NuGet安装, 然后安装, 建立Web Api项目.需要在里的WebApiConfig.cs里配置 config.EnableSystemDiagnosticsTracing(); //感 ...

  8. Dynamics CRM中跨域调用Web API 2

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复224或者20160611可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...

  9. Dynamics 365 CE的插件/自定义工作流活动中调用Web API示例代码

    微软动态CRM专家罗勇 ,回复325或者20190428可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me! 现在Web API越来越流行,有时候为了程序更加健壮,需要在插件 ...

随机推荐

  1. PDF转换成DXF文件?PDF转DXF的操作方法

    在CAD工作中,经常就需要将绘制完成的图纸文件的格式进行转换,那怎么将PDF文件转换成DXF格式的呢?具体要怎么来进行操作呢?本编教程小编就来教教大家具体操作方法,具体操作如下: 一.工具转换 推荐指 ...

  2. 【C#】学习笔记 Linq相关

    Language-Integrated Query(语言集成查询) 写了个demo,具体看

  3. Java 类集初探

    类集 类集:主要功能就是Java数据结构的实现(java.util) 类集就是动态对象数组(链表也是动态数组) Collection 接口* Collection是整个类集之中单值保存的最大 父接口 ...

  4. 并发编程~~~多线程~~~守护线程, 互斥锁, 死锁现象与递归锁, 信号量 (Semaphore), GIL全局解释器锁

    一 守护线程 from threading import Thread import time def foo(): print(123) time.sleep(1) print('end123') ...

  5. 网络编程~~~ socket(套字节)

    一 socket (套接字) socket处于应用层与传输层之间,提供了一些简单的接口,避免与操作系统之间的对接,省去了相当繁琐复杂的操作. socket在python中属于一个模块,通过调用模块中已 ...

  6. MySQL 57安装部署(Zip版)(Windows版)

    1. 在<MYSQL>的根目录下新建一个my.ini写入以下内容 [mysqld] port = 3306 basedir=D:\mysql\mysql-5.7.22-winx64 # M ...

  7. SpringBootTest MockMVC绑定session(需要登陆的接口)

    https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#testing spring-te ...

  8. 曾Python培训讲师-2年Python开发无包装简历-20191217-可公开

    目录 个人介绍 技能介绍 项目经历 自我评价 简历非完整版,需要完整版看下述信息,禁止任何一切私人用途.转发 我生日是27号,那就27元一份,有需求的来购买!只会涨价不会降价,大概卖10份涨1元:曾P ...

  9. IT兄弟连 HTML5教程 HTML5的学习线路图 第一阶段学习网页制作

    学习HTML5技术可并不是简单学会几个新增的标签而已,HTML5现在可以说是前端所有技术的代名词.需要学习的语言和工具不仅多,对于刚接触他们的新人会感觉很乱.另外,前端开发也会细分很多个开发岗位,不同 ...

  10. php laravel请求处理管道(装饰者模式)

    laravel的中间件使用了装饰者模式.比如,验证维护模式,cookie加密,开启会话等等.这些处理有些在响应前,有些在响应之后,使用装饰者模式动态减少或增加功能,使得框架可扩展性大大增强. 接下来简 ...