2016-05-26 13 views
2

Ich habe eine .NET MVC-Anwendung, die mit CRM 2016 Online zusammenarbeiten wird. Ich habe dem Projekt die Azure AD-Authentifizierung hinzugefügt, und es funktioniert einwandfrei, sodass sich Benutzer mit den gleichen Konten, die sie für CRM verwenden, anmelden können. Wenn sie bereits angemeldet sind, gibt es keinen Anmeldebildschirm.Verwenden von Azure AD Credentials zum Herstellen einer Verbindung mit CRM Webservices

Das Problem ist, ich möchte diese Anmeldeinformationen verwenden, um Daten aus CRM entweder durch den Organisationsdienst oder Web API abrufen.

Wie kann ich die bereits vorhandenen Anmeldedaten verwenden und an den Service weitergeben? Irgendwelche Codebeispiele an diesem Ort?

Scheint wie der ADAL wäre der Weg zu gehen. Ich habe versucht, diesen Code hier https://msdn.microsoft.com/en-us/library/gg327838.aspx

// Authenticate the registered application with Azure Active Directory. 
AuthenticationContext authContext = 
new AuthenticationContext("https://login.windows.net/common", false); 
AuthenticationResult result = authContext.AcquireToken(resource, clientId, new 
                Uri(redirectUrl)); 

Es gab keine AuthenticationContext. Ich habe das ADAL NuGet-Paket hinzugefügt, um dies zu erreichen. Aber scheitere! In AuthenticationContext gibt es keine AcquireToken-Methode. Es gibt einen namens AcquireTokenASync, der völlig andere Parameter hat. Also stecke ich auch hier fest!

Wenn dies funktionieren würde, könnte es die Azure AD-Anmeldung verwenden, die ich bereits durchgeführt habe, oder würde es einen neuen Anmeldebildschirm anzeigen?

+0

Ich habe, dass durch das Herunterladen einer älteren Version von ADAL arbeiten. Nun scheitert das AquireToken mit einem Fehler: {"AADSTS65005: Die Client-Anwendung hat Zugriff auf Ressource 'https://xxx.api.crm4.dynamics.com angefordert. Diese Anfrage ist fehlgeschlagen, weil der Client hat Diese Ressource ist nicht in der requiredResourceAccess-Liste angegeben. Was muss ich konfigurieren, damit es funktioniert? – SamiR

+0

Dies scheint nicht zu tun, was ich gesucht habe.Ich bekomme jedes Mal einen neuen Anmeldebildschirm, auch wenn ich es bin bereits mit diesem Office 365-Konto angemeldet. – SamiR

Antwort

0

Dies könnte nicht perfekt für Ihre Situation passen, aber Sie könnten.

  1. Führen Sie Ihre MVC-App unter einem Dienstkonto aus.
  2. Verwenden Sie die Anmeldeinformationen des Dienstkontos, um auf CRM zuzugreifen.
  3. Wenn jemand bei Ihrer MVC-App angemeldet ist, nehme ich an, dass Ihnen etwas wie seine E-Mail-Adresse oder sein Domain-Name zur Verfügung steht.
  4. Als die Service-Konto-Suche CRM für systemuser Datensätze mit der E-Mail-Adresse oder Domain-Namen. Sie müssen die Systembenutzerdatensatz-ID finden.
  5. Erstellen Sie eine weitere IOrganizationService, übergeben Sie jedoch die Benutzerdatensatz-ID, die Sie in CRM gefunden haben.
  6. Ihr Dienstkonto imitiert jetzt fälschlicherweise die Identität des Benutzers, der sich in der MVC-App angemeldet hat. Alles, was Sie tun, wird als der imitierte Benutzer ausgeführt.

Impersonate another user

// Retrieve the system user ID of the user to impersonate. 
OrganizationServiceContext orgContext = new OrganizationServiceContext(_serviceProxy); 
_userId = (from user in orgContext.CreateQuery<SystemUser>() 
      where user.FullName == "Kevin Cook" 
      select user.SystemUserId.Value).FirstOrDefault(); 

// To impersonate another user, set the OrganizationServiceProxy.CallerId 
// property to the ID of the other user. 
_serviceProxy.CallerId = _userId; 

Impersonate another user using the Web API

POST [Organization URI]/api/data/v8.1/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"}