在ISV页面中调用CRM Web Service时使用Impersonate的几个场景

MSCRM作为平台, 其扩展性已为大家所熟悉.  作为扩展的终极方案, 加入自己编写的ASPX页面并在页面里调用MSCRM的Web Service, 能实现更为复杂的客户需求.  我们知道MSCRM中的所有操作都需要有身份验证, 调用Web Service也不会例外.  本文讨论了如何在自己编写的ASPX页面(下文称为ISV页面)中用正确的身份模拟(Impersonate)调用MSCRM的Web Service的几个场景.

 

场景一  ISV页面部署在CRM站点的ISV目录下 

这种情况下无论你的CRM使用的是On-Premise还是IFD的认证方式, 都必须使用CrmImpersonator类, 将调用CRM Web Service的代码写在CrmImpersonator的段落中.  CrmImpersonator会建立一个线程, 将当前CRM使用者的身份运用到调用的CRM Web Service中.

该场景的实现方法, 请参见 Authentication from an ASPX Page

 

场景二  ISV页面部署在非CRM站点, 使用者是非CRM用户

这种场景常见于CRM与其它接口的互动, 比如从公司的Internet网页获得客户数据, 或者CRM与其它应用进行的数据交互.  因为ISV页面的使用者不是CRM用户, 我们必须指定一个CRM用户的身份来调用CRM Web Service, 这可以非常容易的在代码中实现.  注意这个时候CRM用户需要有合适的权限来执行ISV页面中CRM相关操作.

该场景的实现方法, On-Premise验证方式请参见 Impersonation, IFD验证方式请参见 Web Form (IFD) Authentication

 

场景三  ISV页面部署在非CRM站点, 使用者是CRM用户

这时候一般会要求使用当前用户的身份来运行ISV页面中的CRM Web Service调用, 以充分利用MSCRM对于用户的安全规则.  (比如说, 根据当前用户的权限来返回合适的数据.)  一般CRM用户在使用这种ISV页面中, 不需要经过CRM站点, 所以该场景一般只适用于基于Windows身份验证的On-Premise情况.  此时调用CRM Web Service代码比较简单, 可参见On-Premise Authentication.  这种情况中用户先会访问ISV站点, 然后ISV站点再访问CRM, 所以会有一个double-hop Kerberos authentication的问题.  具体的配置方式我们将在别的文章中和大家交流.

 

Thanks,
Chris