2016-08-26 3 views
1

내부 WebAPI와의 인터페이스를 위해 CRM2016에있는 사용자 정의 플러그인 (비 샌드 박스)을 작업 중입니다. 나는이 코드 조각을 실행하면Dynamics CRM 2016 (On-Premise) 호출 사용자 컨텍스트

, 그것은 CRM 응용 프로그램 풀 사용자와 나의 사용자 이름 반환 :

(System.Security.Principal.WindowsIdentity)HttpContext.Current.User.Identity; 

것은이 예상과 정상입니까? 그렇다면 외부 사용자가 호출하는 사용자를 가장하는 방법은 무엇입니까?

감사합니다.

답변

0

예, 정상적인 동기식 플러그인이 웹 서버에서 실행되므로 IIS App Pool 사용자를 확보해야합니다. 플러그인이 비동기 적으로 실행중인 경우 해당 플러그인이 백 엔드 비동기 서비스에서 실행되므로 다른 서비스 계정을 얻을 수 있습니다.

당신은 플러그인이 실행되고있는 시스템 사용자 계정의 CRM GUID입니다 InitiatingUserId 또는 하나 UserId을 얻을 수있는 플러그인 실행 컨텍스트 (IPluginExecutionContext), 검사 할 수 - 실행 방법 플러그인에 따라 이것은 제공 할 수 있습니다 등록 된 플러그인을 시작한 사용자의 CRM ID입니다.

Jeff는 이것을 다음과 같이 설명합니다. How to get current user record in CRM plugin?

정보는 PluginExecutionContext에서 사용할 수 있습니다. 코드 은 플러그인이 구현해야하는 Execute 메소드의 코드입니다.

public void Execute(IServiceProvider serviceProvider) 
{ 
    IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); 
     IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); 
    Guid userId = context.InitiatingUserId; 
} 

FYI 컨텍스트도 또는하지 않을뿐만 InitiatingUserId 동일 할 수있는 "사용자 아이디"속성을 갖는다. 플러그인 단계 등록 "사용자 컨텍스트에서 실행"필드의 값이 "호출 사용자"인 경우 은 동일합니다. "사용자의 컨텍스트에서 실행"필드에 사용자를 지정한 경우 UserId 필드에는 사용자가 지정한 사용자의 사용자 ID가 포함되며 InitiatingUserId는 실제 CRM 사용자가되어 해당 플러그인을 트리거합니다. InitiatingUserId를 찾는 것 같습니다.

아니면 누군가 마지막으로 일부 레코드를 수정 한 사람과 같은 다른 표시기를 사용할 수도 있습니다. 그런 다음 CRM에서 세부 정보를 조회 할 수 있습니다 (예 : 도메인 이름을 얻으려면.

외부 서비스 인증 방법에 따라 사용자를 가장하는 데 도움이 될 수 있습니다. 그렇지 않으면 내가 아는 한 사용자의 보안 토큰을 쉽게 얻을 수있는 방법이 없다는 것을 압니다. CRM은 실제로 그 정보를 노출하지 않습니다.

관련 문제