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

不是在Web资源中调用Web API怎么进行认证呢?如果不认证就会返回 HTTP/1.1 401 Unauthorized ,反正我的IFD环境是这样。有时候真的想用Fiddler等工具来模拟调用看看效果,然后再写代码?怎么办?我这里提供一个不是很聪明的办法,那就是通过OAuth认证后拿到access token,带上这个token来调用Web API就没问题了。首先你的环境要做面向Internet的部署,也就是IFD,可以参考我的好几篇文章:Dynamics CRM 2013 IFD部署之一 ,然后还需要配置OAuth 2.0,可以参考我的这篇文章  Dynamics CRM 2 配置 OAuth 2.0 。其余的就是本文要讲解的内容了。可以通过PowerShell命令 Get-AdfsClient 来获取配置的ClientId 值为ba106265-fb3b-49e0-a0e8-6840b3d71ac2和 RedirectUri 值为http://localhost/callback ,如下所示,这两个参数后面会用到的。
 
 
注意这个URL中的前面部分是你的STS服务器的URL,我这里监控的是444端口,client_id换成前面的ClientId参数值,redirect_uri换成前面获取的RedirectUri参数值,resource参数是你访问的CRM的URL。打开的页面如下:
输入用户名和密码,点击登录后界面如下:
出错是因为我让它跳转的页面是localhost,我这里没有这个给他访问,这是我之前做得CRM混合移动App的Client,执行OAuth认证后需要跳转到本地。关键的是URL,URL值如下:
 
可以看到URL中有个code参数,这个参数就是OAuth认证中的authorization code,需要拿这个authorization code来换取access token。然乎我使用Fiddler来做一个POST请求,POST的URL是 https://sts.luoyong.me:444/adfs/oauth2/token ,Request Body的内容是:
 
grant_type=authorization_code&code=CU1uSwt_n06291OeFrRuWg.myb1WpoE1AgDAF8t1cL752tMQLE.IATP5vl8HO_sdv8OMs0bPACQSXLPb11zMN48-tmSRwkZ9xOy7uoWLBk0652_1v_aIqxuhngQS6zuxaaMRCJ-ppi663TnBhK7LYe-N3jwRcLlDy8fYYDO4eSMKhAo3wNRKiTH4JlGuubMGbB1lHSmU4Ku_Hx4SQnUwj9-XIrgvorWJbVzvqiZjXfZd6UulPJO9x4WuO1aLJzC7wPhlhvu9v8bMu3iSFiPKhg3hegiZFVlPsmXuaXC4vVpFSFv3Fd9Y-JnUVP2DkIU6elZjKA0aNxLj97ecgn7ZdnzFP9JPW0DA7lSRTc_6PXcJl5V-fvmhbXW0jYAK1rcsSCenMWUqA&redirect_uri=http://localhost/callback&client_id=ba106265-fb3b-49e0-a0e8-6840b3d71ac2
 
涉及到的code参数的值就是前面获取的authorization code,redirect_uri是前面获取的RedirectUri ,client_id是前面获取的ClientId参数值,Fiddler界面如下:
 
请求后返回的数据如下,这个 access_token的值是我们需要的,请记载下来。

然后我就可以去调用CRM的Web API了,Fiddler模拟如下,我用Get方法请求 https://demo.luoyong.me/api/data/v8.1/accounts?$select=name

Request Header中使用了如下参数:
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IlRBRzN5S3hrZW04eHppQmpmS3RSUFBoQ1liWSJ9.eyJhdWQiOiJodHRwczovL2RlbW8ubHVveW9uZy5tZS8iLCJpc3MiOiJodHRwOi8vc3RzLmx1b3lvbmcubWUvYWRmcy9zZXJ2aWNlcy90cnVzdCIsImlhdCI6MTQ3ODI1NDAzNiwiZXhwIjoxNDc4MjgyODM2LCJ1cG4iOiJjcm1hZG1pbkBsdW95b25nLm1lIiwicHJpbWFyeXNpZCI6IlMtMS01LTIxLTY1Mzc0MDc5OC0yNDUxMzM4NTMyLTMwMjU3ODY3ODktMTEwNCIsInVuaXF1ZV9uYW1lIjoiTFVPWU9OR1xcY3JtYWRtaW4iLCJhdXRoX3RpbWUiOiIyMDE2LTExLTA0VDEwOjA3OjE2LjIzMloiLCJhdXRobWV0aG9kIjoidXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFjOmNsYXNzZXM6UGFzc3dvcmRQcm90ZWN0ZWRUcmFuc3BvcnQiLCJ2ZXIiOiIxLjAiLCJhcHBpZCI6ImJhMTA2MjY1LWZiM2ItNDllMC1hMGU4LTY4NDBiM2Q3MWFjMiJ9.B5H6VN-mZjechKo9AJuaD0tSaEo4SSr6hk7bjXyuwQuYqC4HX38SHxx0rSRQudpIZae372EdSPyjl-g_ziGT3nRZN0eEC0_hcEWKUYQY3B028-NZH8Z9oicJBnS9KlpGe678az3MtqHpclUSdQ8VdN-MjPoAFDcVh5CQW1jJpes_q7whuxx9_96R900QB5NqlcClPEt2UtOvDDJ9_qm_zdS-bWeFPnKitDc3S4SdRNhoasA2qT4bql50EgkWAJ3g34Kby7baPzE-KKtVF_u_oXt8fRF8z1vGD1_Tg4qlzNezgC1dKrjk9xF_c2MNbSkVsq5ug66t8AHlHEoNauhwkg
 
注意 Authorization: Bearer的后面加上一个空格,再加上前面获取的access token的值。得到的请求返回如下:
可以看到没有说未经授权了,调用成功。当然也可以做其他调用,比如新增记录,Get改成POST,请求的URL是https://demo.luoyong.me/api/data/v8.1/ly_tests,请求的Request Body是 {'ly_name':'单行文本','ly_bool':true},返回的结果如下,可以看到创建记录成功了。
 

Dynamics CRM模拟OAuth请求获得Token后在外部调用Web API的更多相关文章

  1. Dynamics CRM 配置 OAuth 2.0

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复124或者20140324可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 本博文主要参考但不限于如下资料: ...

  2. ASP.NET Web API与Owin OAuth:调用与用户相关的Web API

    在前一篇博文中,我们通过以 OAuth 的 Client Credential Grant 授权方式(只验证调用客户端,不验证登录用户)拿到的 Access Token ,成功调用了与用户无关的 We ...

  3. Token Based Authentication in Web API 2

    原文地址:http://www.c-sharpcorner.com/uploadfile/736ca4/token-based-authentication-in-web-api-2/ Introdu ...

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

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

  5. [转] JSON Web Token in ASP.NET Web API 2 using Owin

    本文转自:http://bitoftech.net/2014/10/27/json-web-token-asp-net-web-api-2-jwt-owin-authorization-server/ ...

  6. JSON Web Token in ASP.NET Web API 2 using Owin

    In the previous post Decouple OWIN Authorization Server from Resource Server we saw how we can separ ...

  7. 基于JWT(Json Web Token)的ASP.NET Web API授权方式

    token应用流程 初次登录:用户初次登录,输入用户名密码 密码验证:服务器从数据库取出用户名和密码进行验证 生成JWT:服务器端验证通过,根据从数据库返回的信息,以及预设规则,生成JWT 返还JWT ...

  8. ASP.NET Web API与Owin OAuth:调用与用户相关的Web API(非第三方登录)

    授权完成添加属性 ClaimsIdentity oAuthIdentity = await CreateAsync(user/*userManager*/, OAuthDefaults.Authent ...

  9. 利用Fiddler修改请求信息通过Web API执行Dynamics 365操作(Action)实例

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

随机推荐

  1. Oracle数据库表分区

    一.Oracle数据库表分区概念和理解         1.1.已经存在的表没有方法可以直接转化为分区表.         1.2.不在分区字段上建立分区索引,在别的字段上建立索引相当于全局索引.效率 ...

  2. ASCII、 Unicode 和 UTF8

    ASCII: 英文字母与数字编号的一一对应.每个英文字母对应一个编号.范围0~127 Unicode: 全世界所有语言中字符与数字编号的一一对应.也即为存在的每个字符指定一个唯一的编号.范围为0~0x ...

  3. swagger-codegen自动生成代码工具的介绍与使用

    一.Swagger Codegen简介 Swagger Codegen是一个开源的代码生成器,根据Swagger定义的RESTful API可以自动建立服务端和客户端的连接.Swagger Codeg ...

  4. Go笔记之二:一个完整的播放器示例

    Go笔记之二:一个完整的播放器示例 该示例从命令行运行一个播放器示例,可进行添加.删除.浏览和模拟播放,其内容是对 Go 语言接口使用的良好展示 源码及可执行文件 参考书籍<Go语言编程> ...

  5. 闪回工具flashback

    Ⅰ.背景 早先操作数据误操作后,我们一般通过全量备份+binlog的方式来实现恢复(前滚) 有时只想撤销一个几分钟前的操作,采用这种方式就会显得很笨重 大家都知道Oracle有个叫做flashback ...

  6. InnoDB存储引擎结构介绍

    Ⅰ.InnoDB发展史 时间 事件 备注 1995 由Heikki Tuuri创建Innobase Oy公司,开发InnoDB存储引擎 Innobase开始做的是数据库,希望卖掉该公司 1996 My ...

  7. Spring Security-- 验证码功能的实现

    spring security4 添加验证码 http://www.itwendao.com/article/detail/165400.html http://www.itdadao.com/art ...

  8. c# xml操作(一)

    c# xml操作(一) 此博文包含图片 (-- ::)转载▼ 标签: 杂谈 分类: c# 同样是增,删,改,查四种操作.现在我们就详细介绍一下增和删两种操作.看下面的一个xml示例: <?xml ...

  9. FreeRTOS数据结构(一)--链表和链表项

    结构体定义 /*链表结构体*/ typedef struct xLIST { listFIRST_LIST_INTEGRITY_CHECK_VALUE /*用于链表完整性检查*/ configLIST ...

  10. go语言nsq源码解读六 tcp.go、tcp_server.go

    本篇讲nsqlookupd中tcp.go.tcp_server.go tcp_server.go位于util目录下. 12345678910111213141516171819202122232425 ...