2016-08-26 4 views
1

Ich arbeite an einem benutzerdefinierten Plug-in (nicht Sandboxed) in einem CRM2016 vor Ort mit einer internen WebAPI zu verbinden.Dynamics CRM 2016 (On-Premise) Aufruf von Benutzerkontext

Als ich dieses Stück Code ausführen, wird es die CRM App Pool Benutzer zurückkehrt und meine Benutzername nicht:

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

Ist der erwartete und normal? Wenn ja, wie imitieren Sie den anrufenden Benutzer für externe Anrufe?

Danke.

Antwort

0

Ja, das ist normal, synchrone Plugins werden auf dem Webserver ausgeführt, daher wird erwartet, dass der IIS App Pool-Benutzer abgerufen wird. Wenn das Plugin asynchron ausgeführt wird, wird es auf dem asynchronen Back-End-Dienst ausgeführt, sodass Sie wahrscheinlich ein anderes Dienstkonto erhalten.

Sie können das Plugin Ausführungskontext (IPluginExecutionContext) untersuchen entweder InitiatingUserId oder UserId zu erhalten, die die CRM-GUID des Systems Benutzerkonto, unter dem das Plugin ausgeführt wird - je nachdem, wie auf dem Plugin ausgeführt wird und registriert ist, kann dies geben Sie die CRM-Identität des Benutzers, der das Plugin gestartet hat.

Jeff beschreibt dies innerhalb; How to get current user record in CRM plugin?

Die Informationen sind im PluginExecutionContext verfügbar. Der Code unten ist von der Execute-Methode, die Ihr Plugin implementieren muss.

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

FYI, der Kontext hat auch eine „Benutzer-ID“ Eigenschaft, die nicht oder kann die gleiche wie die InitiatingUserId sein kann. Wenn Ihre Plugin-Schritt-Registrierung "Im Kontext des Benutzers ausführen" den Wert "Calling User" hat, dann sind sie gleich. Wenn Sie im Feld "Im Benutzer Kontext ausführen" einen Benutzer angegeben haben, enthält das UserId-Feld die Benutzer-ID der von Ihnen angegebenen Person und die InitiatingUserId ist der tatsächliche CRM-Benutzer , dessen Aktion das Plug-in ausgelöst hat. Klingt, als ob Sie nach der InitiatingUserId für suchen.

Oder vielleicht könnten Sie einen anderen Indikator verwenden, z. B. wer zuletzt einen Datensatz geändert hat. Sie könnten dann ihre Details in CRM nachschlagen, z. um ihren Domain-Namen zu erhalten.

Je nachdem, wie Sie sich mit dem externen Dienst authentifizieren, kann dies helfen, den Benutzer zu imitieren. Ansonsten, soweit ich weiß, gibt es keine einfache Möglichkeit, das Sicherheitstoken des Benutzers zu erhalten, beispielsweise gibt CRM diese Information nicht wirklich frei.

Verwandte Themen