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;
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. –
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
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) –