Del via


Oprette forbindelse til Microsoft Dynamics 365-webtjenester vha. OAuth

 

Udgivet: januar 2017

Gælder for: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

OAuth er den godkendelsesmetode, der understøttes af Microsoft Dynamics 365-Web-API'en, og er en af to godkendelsesmetoder for organisationstjenesten – den anden er Active Directory-godkendelse. En af fordelene ved at bruge OAuth er, at programmet kan understøtte multifaktorgodkendelse. Du kan bruge OAuth-godkendelse, når programmet opretter forbindelse til enten organisationstjenesten eller registreringstjenesten.

Metodekald til webtjenester skal godkendes af identitetsudbyderen for det pågældende tjenesteslutpunkt. Godkendelsen træder i kraft, når et gyldigt OAuth 2.0 (bruger) adgangstoken udstedt af Microsoft Azure Active Directory findes i headere i meddelelsesanmodninger.

Den anbefalede godkendelses-API til brug med Dynamics 365-Web API'en er Azure Active Directory Authentication Library (ADAL), som kan anvendes til en lang række platforme og programmeringssprog. ADAL API'en styrer OAuth 2.0-godkendelse hos Dynamics 365-webtjenestens identitetsudbyder. Du kan finde flere oplysninger om den faktiske OAuth-protokol, der bruges, i Brug OAuth til godkendelse med CRM-tjenesten.

Før du kan bruge OAuth-godkendelse til at oprette forbindelse til Dynamics 365-webtjenesterne, skal programmet først registreres i Microsoft Azure Active Directory.Azure Active Directory bruges til at kontrollere, at dit program har adgang til de virksomhedsdata, der er gemt i en Dynamics 365-lejer.

Godkendelse via ADAL

Grundlæggende OAuth-webtjenestegodkendelse ved hjælp af ADAL sker ved hjælp af nogle få kodelinjer.

// TODO Substitute your correct CRM root service address, 
string resource = "https://mydomain.crm.dynamics.com";

// TODO Substitute your app registration values that can be obtained after you
// register the app in Active Directory on the Microsoft Azure portal.
string clientId = "e5cf0024-a66a-4f16-85ce-99ba97a24bb2";
string redirectUrl = "https://localhost/SdkSample";


// 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));

Godkendelseskonteksten returneres ved hjælp af en velkendt udbydercenteret. Når du ikke kender den Azure Active Directory-lejer, der er knyttet til den Dynamics 365-forekomst, du kalder, kan du bruge en konstant " https://login.windows.net/common"-streng, som er URL til nøglecenteret i et scenario med flere lejere. En alternativ metode til at finde nøglecenteret dynamisk under kørsel er beskrevet senere i dette emne.

Den næste kodelinje henter det godkendelsesresultat, der indeholder det adgangstoken, du leder efter. Du kan sende meddelelsesanmodninger til webtjenesten med dette token.

Endnu et par flere elementer af interesse i denne kode er de strengværdier, der bruges. Ressourcevariablen indeholder TLS (Transport Layer Security) eller SSL (Secure Sockets Layer)-rodadressen, herunder domænet (organisationen) for din Dynamics 365-server.clientId- og redirectUrl-variablerne indeholder de app-registreringsoplysninger, der er resultatet af registreringen af app i Active Directory. Du kan finde flere oplysninger om app-registrering under Gennemgang: Registrere en Dynamics 365-app med Azure Active Directory.

Bruge adgangstoken i meddelelsesanmodninger

Afhængigt af hvilken Dynamics 365-API du bruger, er der to forskellige metoder til at sende en meddelelsesanmodning til webtjenesterne. For Web-API'en skal du normalt sende en HTTP-meddelelsesanmodning. For organisationstjenesten kan du sende en meddelelsesanmodning via webklientproxyen.

HTTP-meddelelsesanmodning

Når du har adgangstokenet, skal du indstille godkendelsesheaderen i den meddelelsesanmodning, du sender til webtjenesten, til adgangstokenets værdi og angive tokentypen "Bearer". Du kan finde flere oplysninger om godkendelsesheaderen i afsnit 14.8 i HTTP/1.1-protokollen. Følgende kode viser, hvordan dette gøres ved hjælp af System.Net.Http.HttpClient-klassen.

using (HttpClient httpClient = new HttpClient())
{
    httpClient.Timeout = new TimeSpan(0, 2, 0);  // 2 minutes
    httpClient.DefaultRequestHeaders.Authorization = 
        new AuthenticationHeaderValue("Bearer", result.AccessToken);

Anmodninger fra webklienter

Du skal blot indstille HeaderToken-egenskabsværdien til adgangstokenet, når du bruger OrganizationWebProxyClient eller DiscoveryWebProxyClient fra organisationstjenesten.

Opdatere adgangstoken

Det er en anbefalet bedste fremgangsmåde at opdatere adgangstokenet inden hvert kald til en Dynamics 365-webtjenestemetode. Dette er en løsning på at skrive kode, der kontrollerer adgangtokenets udløbsdato og -klokkeslæt og opdaterer tokenet, når det er ved at udløbe.

Hvis du vil opdatere adgangstokenet, der er cachelagret af ADAL, skal du blot kalde AcquireToken-metoden igen ved hjælp af den samme kontekst.

AuthenticationResult result = authContext.AcquireToken(resource, clientId, new Uri(redirectUrl));

Bagefter skal du igen angive godkendelsesheaderen med result.AccessToken, når du bruger Web-API'en, eller HeaderToken, når du bruger organisationstjenesten.

httpClient.DefaultRequestHeaders.Authorization = 
    new AuthenticationHeaderValue("Bearer", result.AccessToken);

Registrere nøglecenteret på kørselstidspunktet

Nøglecenterets URL og ressourcens URL kan fastslås dynamisk under kørslen ved hjælp af følgende ADAL-kode. Dette er den metode, der anbefales at bruge i forhold til centerets velkendte URL, som blev vist tidligere i et kodestykke.

AuthenticationParameters ap = AuthenticationParameters.CreateFromResourceUrlAsync(
                        new Uri("https://mydomain.crm.dynamics.com/api/data/")).Result;

String authorityUrl = ap.Authority;
String resourceUrl  = ap.Resource;

Web-API'en kan også få adgang til centerets URL ved at sende en meddelelsesanmodning til webtjenesten uden at angive et adgangstoken. Dette kaldes en bærerudfordring. Svaret kan analyseres for at få centerets URL oplyst.

httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", “”);

Se også

Gennemgang: Registrere en Dynamics 365-app med Azure Active Directory
Dokumentation til multifaktorgodkendelse
OAuth 2.0

Microsoft Dynamics 365

© 2017 Microsoft. Alle rettigheder forbeholdes. Ophavsret