Dynamics 365本地部署版本通过OAuth 2 Client Credentials授权访问Web API

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

本文使用的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 备用。

扫描二维码关注公众号,回复: 6118310 查看本文章

在下一步的界面中选中 【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了,根据 Client Credentials 的请求说明,我这里先用Fiddler来模拟,发起一个POST请求到 https://demo.luoyong.me:444/adfs/oauth2/token ,Request body是 grant_type=client_credentials&client_id=06e7a1c2-f0e5-4782-a801-32ef21c7abf1&client_secret=ulTwJKJP9bcacamvvE8y0kSBjUziL-I7uOnm-YyL 。

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

{
    "access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IlRMUW52dDNxa2YtYVNIVDFkV0t0bkFMLUZGQSJ9.eyJhdWQiOiJ1cm46bWljcm9zb2Z0OnVzZXJpbmZvIiwiaXNzIjoiaHR0cDovL2RlbW8ubHVveW9uZy5tZS9hZGZzL3NlcnZpY2VzL3RydXN0IiwiaWF0IjoxNTU2OTc4MDg5LCJleHAiOjE1NTY5ODE2ODksImFwcHR5cGUiOiJDb25maWRlbnRpYWwiLCJhcHBpZCI6IjA2ZTdhMWMyLWYwZTUtNDc4Mi1hODAxLTMyZWYyMWM3YWJmMSIsImF1dGhtZXRob2QiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvYXV0aGVudGljYXRpb25tZXRob2QvcGFzc3dvcmQiLCJhdXRoX3RpbWUiOiIyMDE5LTA1LTA0VDEzOjU0OjQ5LjgxOFoiLCJ2ZXIiOiIxLjAifQ.NGfhEGo2dcOsfj3zoCtPgOTUCdJt7ZufkudauojNfw-4GpAz1FCwEzqOZJzFCG9F8y1Mrx45eBPMpRQMJBqQlrDknQuJyREbVzSvcsBNJ3AcnmTnHTFVUka4PbNwnnpvfIZeqcj0-t3dth1VX4jnYWrdTYCNT-mffkN6vzYbYoyr-SePY0OwpnWezwTpiqHNPRUKKxqFfvOMofBjXfDsVk6x1K6LpnkPFXg4_vxYT4Vd7BA0j7EPeySjm5yYC_L9ZDHwTuTMsFKYONNVl-TCMfDCbf9gacaUn1ml2d2gUXXq3a2C0kzPnC61q829REHWvRjCF5BEgIpRsqC3I03fOw",
    "token_type":"bearer",
    "expires_in":3600
}

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

然后就可以用来调用web api了,但是目前我的本地部署环境调用出错 HTTP Error 401 - Unauthorized: Access is denied,待解决。

猜你喜欢

转载自www.cnblogs.com/luoyong0201/p/Dynamics_365_OnPremise_ADFS_4_OAuth_2_Client_Credentials.html