使用 Web API 模拟其他用户
模拟的要求
模拟可代表另一个 Microsoft Dynamics CRM 用户,用于执行业务逻辑(代码)以便提供所需功能或服务,它使用模拟用户的相应角色和基于对象的安全性。这项技术很有必要,因为 Microsoft Dynamics CRM Web 服务可能由代表 CRM 用户的各种客户端和服务调用,例如,在工作流或自定义 ISV 解决方案中进行调用。模拟涉及两个不同的用户帐户:当代表另一个用户 (B) 运行代码以执行任务时,使用用户帐户 (A)。
用户帐户 (A) 需要 prvActOnBehalfOfAnotherUser 权限,其包含于代理安全角色中。用于修改数据的实际权限集是代理角色用户拥有模拟用户的权限的权限交集。也就是说,当且仅当用户 (A) 和被模拟用户 (B) 都拥有执行此操作的必要权限时,才允许用户 (A) 做某事。
如何模拟用户
若要模拟用户,请在将请求发送到 Web 服务之前添加一个名为 MSCRMCallerID 且 GUID 值等效于被模拟用户的 systemuserid 的请求头。在此示例中,代表 systemuserid 为 00000000-0000-0000-000000000002 的用户创建一个新的帐户实体。
- 请求
-
POST [organization URI]/api/data/v8.0/accounts HTTP/1.1 MSCRMCallerID: 00000000-0000-0000-000000000002 Accept: application/json Content-Type: application/json; charset=utf-8 OData-MaxVersion: 4.0 OData-Version: 4.0 {"name":"Sample Account created using impersonation"}
- 响应
-
HTTP/1.1 204 No Content OData-Version: 4.0 OData-EntityId: [organization URI]/api/data/v8.0/accounts(00000000-0000-0000-000000000003)
确定实际用户
当使用模拟执行创建实体等操作时,可以通过查询记录(包括 createdonbehalfby 单值导航属性)找到实际执行操作的用户。相应的 modifiedonbehalfby 的单值导航属性可用于更新实体的操作。
- 请求
-
GET [organization URI]/api/data/v8.0/accounts(00000000-0000-0000-000000000003)?$select=name&$expand=createdby($select=fullname),createdonbehalfby($select=fullname),owninguser($select=fullname) HTTP/1.1 Accept: application/json OData-MaxVersion: 4.0 OData-Version: 4.0
- 响应
-
HTTP/1.1 200 OK Content-Type: application/json; odata.metadata=minimal ETag: W/"506868" { "@odata.context": "[organization URI]/api/data/v8.0/$metadata#accounts(name,createdby,createdonbehalfby,owninguser,createdby(fullname),createdonbehalfby(fullname),owninguser(fullname))/$entity", "@odata.etag": "W/\"506868\"", "name": "Sample Account created using impersonation", "accountid": "00000000-0000-0000-000000000003", "createdby": { "@odata.etag": "W/\"506834\"", "fullname": "Impersonated User", "systemuserid": "00000000-0000-0000-000000000002", "ownerid": "00000000-0000-0000-000000000002" }, "createdonbehalfby": { "@odata.etag": "W/\"320678\"", "fullname": "Actual User", "systemuserid": "00000000-0000-0000-000000000001", "ownerid": "00000000-0000-0000-000000000001" }, "owninguser": { "@odata.etag": "W/\"506834\"", "fullname": "Impersonated User", "systemuserid": "00000000-0000-0000-000000000002", "ownerid": "00000000-0000-0000-000000000002" } }
使用 Web API 模拟其他用户的更多相关文章
- 集成架构:对比 Web API 与面向服务的架构和企业应用程序集成(转)
http://kb.cnblogs.com/page/521644/ 摘要:总体上讲,SOA 和 Web API 似乎解决的是同一个问题:以实时的.可重用的方式公开业务功能.本教程将分析这些举措有何不 ...
- (转)集成架构:对比 Web API 与面向服务的架构和企业应用程序集成
摘要:总体上讲,SOA 和 Web API 似乎解决的是同一个问题:以实时的.可重用的方式公开业务功能.本教程将分析这些举措有何不同,以及如何将它们融入到一个不断演变的集成架构中.文中还将讨论 API ...
- Dynamics 365中使用Web API将查找字段的值设置为空值的方法。
摘要: 本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复270或者20180424可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyon ...
- ASP.NET Web API与Owin OAuth:调用与用户相关的Web API
在前一篇博文中,我们通过以 OAuth 的 Client Credential Grant 授权方式(只验证调用客户端,不验证登录用户)拿到的 Access Token ,成功调用了与用户无关的 We ...
- ASP.NET MVC 5 WEB API 用户验证
参考博客:ASP.NET MVC5+EF6+EasyUI 后台管理系统(65)-MVC WebApi 用户验证 (1) 参考博客:MVC WebApi 用户验证 (2)构建ASP.NET MVC5+E ...
- Dynamics CRM模拟OAuth请求获得Token后在外部调用Web API
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复233或者20161104可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...
- ASP.NET Web API实践系列09,在Fiddler和控制台中模拟GET和POST请求
ASP.NET Web API本质是由一个进程托管的一组类,需要宿主,这个宿主可以是ASP.NET应用程序,可以是MVC项目,可以是控制台应用程序,也可以是自己定制的宿主. 在VS2012中创建一个& ...
- 利用Fiddler模拟通过Dynamics 365的OAuth 2 Client Credentials认证后调用Web API
微软动态CRM专家罗勇 ,回复337或者20190521可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me. 配置Dynamics 365 & PowerApps 支 ...
- Web Api 2 用户认证模板解析-----外部用户认证模式
一般的社交提供商不提供一个Web Service进行身份验证(有很好的理由),而提供一个身份验证的界面,其中包含了某种协议如OpenID(连接)或使用OAuth2认证.这意味着客户端应用必须使用一个浏 ...
随机推荐
- NYOJ 975
这道题一开始本着很朴素的想法就是先输入两头的数据,然后对每组的数据范围下测试中间的数据即可,但是是超时的.原因也很明显,比如计算1~1000的数据之后,假如下一组数据是1~1001,本来只需要多测试下 ...
- Jquery对网页高度、宽度的操作
Jquery获取网页的宽度.高度 网页可见区域宽: document.body.clientWidth 网页可见区域高: document.body.clientHeight 网页可见区域宽: doc ...
- 在树莓派Raspbian下安装支持Hard Float的.NET环境
[题外话] 最近入了个树莓派玩,系统装的官方推荐的Hard Float的Raspbian,由于衍生自Debian,所以Mono什么的非常好装.但是官方源中的Mono在Hard Float的Raspbi ...
- Mono 3.2.3 TCP吞吐性能测试报告
在前几天简单地测试了一下Mono 3.2.3 TCP处理的稳定性,有同学问Mono 3.2.3的TCP处理性有怎样,以下是针对Mono 3.2.3TCP在吞吐方面的性能测试.主要测试分两种场分别是连接 ...
- es6之变量的解构赋值
es5中通常我们声明变量都是以下的方式: var a = 10; var b = 20; var c = 30; //或者 var a = 10,b = 20,c = 30; //或者 var arr ...
- 【原】SDWebImage源码阅读(四)
[原]SDWebImage源码阅读(四) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 SDWebImage中主要实现了NSURLConnectionDataDelega ...
- scheduleInRunLoop作用
例子一: - (void)setUpStreamForFile:(NSString *)path { // iStream is NSInputStream instance variable iSt ...
- 【java】细说 JAVA中 标注 注解(annotation)
Java注解是附加在代码中的一些元信息,用于一些工具在编译.运行时进行解析和使用,起到说明.配置的功能.注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用 下面我们来详细说说这个注解,到底是怎么一 ...
- JS作用域面试题总结
关于JS作用域问题,是面试的时候面试官乐此不疲的面试题,有时候确实是令人抓狂,今天看到一个讲解这个问题的视频,明白了那些所谓的“原理”顿时有种豁然开朗的感觉~~~ 1.js作用域(全局变量,局部变量) ...
- .NET Core的文件系统[2]:FileProvider是个什么东西?
在<读取并监控文件的变化>中,我们通过三个简单的实例演示从编程的角度对文件系统做了初步的体验,接下来我们继续从设计的角度来继续认识它.这个抽象的文件系统以目录的形式来组织文件,我们可以利用 ...