2016-05-02 25 views
6

Próbuję uwierzytelnić się za pomocą Dynamics CRM 2016 Online i Azure Active Directory. Udało mi się wykonać wszystkie czynności tutaj:Dynamiczny CRM 2016 Online Rest API z poświadczeniami klienta Przepływ OAuth

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

ale te kroki pokazują, jak w konfiguracji przepływu uwierzytelniania nazwa użytkownika. Chciałbym użyć przepływu poświadczeń klienta. Stworzyłem nową aplikację w Azure AD - aplikacji internetowej. Mam identyfikator klienta i klucz aplikacji i ustawiam uprawnienia dla Dynamics CRM Online. Mogę uzyskać token dostępu, ale po kolejnych wywołaniach pojawia się ten błąd:

HTTP Error 401 - Unauthorized: Access is denied

Czy jest jakiś krok, który przeoczyłem? Czy ktokolwiek wie o jakimś miejscu, który zawiera szczegółowe informacje o tym, jak uruchomić ten przepływ?

Oto mój kod:

 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

podobne do http://stackoverflow.com/questions/37215742/401-unauthorized-authentication-using-rest-api-dynamics-crm-with-azure-ad#comment61963502_37215742 To może być możliwe, że ich API nie obsługuje kredytów aplikacji. Być może szukają oni konkretnego uprawnienia (przyznanego przez delegowany dostęp), który nie istnieje w tokenie dostępu uzyskanym w wyniku przepływu danych uwierzytelniających. –

+0

Proszę zobaczyć rozwiązanie mojego podobnego pytania http://stackoverflow.com/questions/37454539/using-adal-c-sharp-as-confidential-user-daemon-server-server-to-server-401-u/38008891 # 38008891 – IntegerWolf

+0

Możliwy duplikat [Używanie ADAL C# jako poufnego użytkownika/demona serwera/serwera do serwera - 401 nieautoryzowane] (https://stackoverflow.com/questions/37454539/using-adal-c-sharp-as-confidential -user-daemon-server-server-to-server-401-u) –

Odpowiedz