You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dynamics CRM是否可对OrganizationData服务实现身份模拟?

Dynamics CRM OrganizationData 服务身份模拟实现方案(规避NTLM)

以下两种方案均可实现需求,无需依赖NTLM协议:

方案1:原生请求头模拟(改动最小,优先选择)

CRM 2011 OrganizationData OData端点原生支持通过请求头传递模拟用户标识,无需依赖Windows身份上下文的模拟能力:

  • 调用服务时在请求头中新增CallerId字段,值为待模拟的CRM用户的GUID,该机制是CRM官方提供的模拟能力,和身份认证协议完全解耦。
  • 身份认证层直接对接OAuth2即可:如果是On-Premises部署的CRM可配合ADFS配置OAuth认证,Online版本直接对接Azure AD OAuth,全程不需要用到NTLM协议。
  • 如果你使用的是自动生成的WCF Data Services客户端代理,可通过请求拦截逻辑统一注入头信息,示例代码如下:
// 初始化OrganizationData上下文
var orgContext = new OrganizationDataContext(new Uri("https://crm/OnBoarding/XRMServices/2011/OrganizationData.svc/"));
// 配置OAuth认证凭证,替代NTLM认证
orgContext.Credentials = /* 你的OAuth访问凭证,可使用客户端凭证流或委托令牌 */;
// 统一注入模拟用户头
orgContext.SendingRequest2 += (sender, eventArgs) =>
{
    eventArgs.RequestMessage.SetHeader("CallerId", "【替换为待模拟用户的CRM系统GUID】");
};

方案2:用户令牌委托模式

如果需要严格模拟前端登录用户的身份权限,可采用令牌委托的方式:

  • 前端层获取当前登录用户的OAuth访问令牌,传递到后端服务
  • 后端直接使用该用户令牌调用OrganizationData服务,同时可根据需求决定是否需要额外注入CallerId头切换模拟身份,全程不需要处理用户密码,也不需要NTLM协议支持。

前置配置要求

  • 你用于调用CRM服务的基础服务账号,需要在CRM安全角色中配置Act on behalf of another user(代表其他用户执行操作)权限,否则模拟请求会返回403错误。
  • 如果你的CRM实例版本高于2016,也可以选择将原有代码的OData调用适配到新版Web API端点,但如果要最大限度复用遗留代码,方案1的改动量最小。

内容的提问来源于stack exchange,提问作者Krzysztof

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:36:03