2016-05-02 2 views
6

Ich versuche, mit Dynamics CRM 2016 Online und Azure Active Directory zu authentifizieren. Ich konnte alle hier die Schritte folgen:Dynamics CRM 2016 Online Rest API mit Client-Anmeldeinformationen OAuth-Fluss

https://msdn.microsoft.com/en-us/library/mt622431.aspx und https://msdn.microsoft.com/en-us/library/gg327838.aspx

aber diese Schritte zeigen, wie Benutzerauthentifizierungsablauf einzurichten. Ich möchte den Client-Credentials-Flow verwenden. Ich habe eine neue App in Azure AD erstellt - eine Webanwendung. Ich habe eine Client-ID und einen App-Schlüssel und ich richte die Berechtigungen für Dynamics CRM Online ein. Ich bin in der Lage, die Zugriffstoken zu erhalten, aber bei zukünftigen Anrufe bekomme ich diesen Fehler:

HTTP Error 401 - Unauthorized: Access is denied

Gibt es einen Schritt, den ich verpasst? Kennt irgendjemand irgendwo einen Post, der Details darüber liefert, wie dieser Flow funktioniert?

Hier ist mein Code:

 string clientId = "<client id>"; 
     string appKey = "<app key>"; 

     // Get the authority and resource URL at runtime 
     AuthenticationParameters ap = AuthenticationParameters.CreateFromResourceUrlAsync(new Uri("https://<org address>/api/data/")).Result; 
     String authorityUrl = ap.Authority; 
     String resourceUrl = ap.Resource; 

     // Authenticate the registered application with Azure Active Directory. 
     AuthenticationContext authContext = new AuthenticationContext(authorityUrl); 
     ClientCredential clientCredential = new ClientCredential(clientId, appKey); 

     AuthenticationResult result = authContext.AcquireToken(resourceUrl, clientCredential); 

     HttpClient client = new HttpClient(); 
     client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken); 
     HttpResponseMessage response = client.GetAsync("https://<org address>/api/data/v8.1/EntityDefinitions").Result; 
+0

Ähnlich http://stackoverflow.com/questions/37215742/401-unauthorized-authentication-using-rest-api-dynamics-crm-with-azure-ad#comment61963502_37215742 Es könnte möglich, dass ihre API keine Anwendungs-Credits unterstützt. Möglicherweise suchen sie nach einer bestimmten Berechtigung (die von einem delegierten Zugriff erteilt wurde), die nicht in dem Zugriffstoken vorhanden ist, das durch den Berechtigungsablauf erworben wurde. –

+0

Bitte lesen Sie die Lösung für meine ähnliche Frage http://StackOverflow.com/questions/37454539/using-adal-c-sharp-as-confidential-user-daemon-server-server-to-server-401-u/38008891 # 38008891 – IntegerWolf

+0

Mögliches Duplikat von [ADAL C# als vertraulichen Benutzer verwenden/Daemon Server/Server-zu-Server - 401 nicht autorisiert] (https://stackoverflow.com/questions/37454539/using-adal-c-sharp-as-confidential -user-daemon-server-server-zu-server-401-u) –

Antwort