Sto tentando di accedere a un'API REST online Dynamics CRM con Azure AD oAuth 2 Authentication. Per fare ciò ho seguito questi passaggi:
- Ho registrato un'applicazione Web e/o web api in Azure
- Configurate le autorizzazioni per Dynamics CRM per disporre delle autorizzazioni delegate "Accesso a CRM Online come utente dell'organizzazione"
- E ha creato una chiave con una scadenza di 1 anno e ha mantenuto l'ID cliente generato.
Dopo l'applicazione web è stato configurato su Azure Ho creato un'applicazione console in .NET/C# che utilizza ADAL per fare una semplice richiesta, in questo caso per recuperare un elenco di account:
401- Autenticazione non autorizzata mediante l'API REST Dynamics CRM con Azure AD
class Program
{
private static string ApiBaseUrl = "https://xxxxx.api.crm4.dynamics.com/";
private static string ApiUrl = "https://xxxxx.api.crm4.dynamics.com/api/data/v8.1/";
private static string ClientId = "2a5dcdaf-2036-4391-a3e5-9d0852ffe3f2";
private static string AppKey = "symCaAYpYqhiMK2Gh+E1LUlfxbMy5X1sJ0/ugzM+ur0=";
static void Main(string[] args)
{
AuthenticationParameters ap = AuthenticationParameters.CreateFromResourceUrlAsync(new Uri(ApiUrl)).Result;
var clientCredential = new ClientCredential(ClientId, AppKey);
var authenticationContext = new AuthenticationContext(ap.Authority);
var authenticationResult = authenticationContext.AcquireToken(ApiBaseUrl, clientCredential);
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authenticationResult.AccessToken);
var result = httpClient.GetAsync(Path.Combine(ApiUrl, "accounts")).Result;
}
}
Recupero un token di accesso con successo ma quando provo a fare un httprequest a CRM ottengo sempre un 401 - Codice di stato non autorizzato. Cosa mi manca?
credo che le sue autorizzazioni non corrette sul token. Quello che stai facendo è usare le credenziali dell'applicazione per ottenere contenuti. Le autorizzazioni che hai selezionato quando hai aggiunto CRM erano PErmissions delegate. Entrambe sono cose diverse. Cosa succede se si utilizzano i crediti utente di un utente nella stessa directory per l'autenticazione e l'accesso? –
Ho già creato un'applicazione client nativa, con la quale sono stato integrato con successo con CRM, ma ho dovuto fornire le credenziali dell'utente per ottenere un token da Azure. Il mio obiettivo è evitare di utilizzare le credenziali dell'utente. A tale scopo sto cercando di ottenere un token attraverso lo scambio di chiavi (il metodo che ho spiegato nel post) o attraverso il certificato. – AndreCavaca
Hai controllato? https://msdn.microsoft.com/en-us/library/gg327838.aspx –