Se connecter aux services Web Microsoft Dynamics 365 à l'aide d'OAuth
Date de publication : janvier 2017
S’applique à : Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online
OAuth est la méthode d'authentification prise en charge par l'API Web Microsoft Dynamics 365, et est l'une des deux méthodes d'authentification du service d'organisation (l'autre étant l'authentification Active Directory). L'un des avantages de l'utilisation OAuth est que votre application peut prendre en charge l'authentification multifacteur. Vous pouvez utiliser l'authentification OAuth lorsque votre application se connecte au service d'organisation ou au service de découverte.
Les appels de méthode aux services Web doivent être autorisés avec le fournisseur d'identité de ce point de terminaison de service. L'autorisation est approuvée lorsqu'un jeton d'accès OAuth 2.0 (utilisateur) valide, émis par Microsoft Azure Active Directory, est fourni dans les en-têtes des demandes de message.
L'API recommandée d'authentification recommandée à utiliser pour l'API Web Dynamics 365, est Bibliothèque d'authentification Microsoft Azure Active Directorydisponible pour un large éventail de plateformes et de langues de programmation. L'API ADAL gère l'authentification OAuth 2.0 avec le fournisseur d'identité du service Web Dynamics 365. Pour plus d'informations sur le protocole OAuth actuel utilisé, voir Utilisation du protocole OAuth pour l'authentification auprès du service CRM.
Pour pouvoir utiliser l'authentification OAuth pour vous connecter aux services Web Dynamics 365, votre application doit d'abord être enregistrée auprès de Microsoft Azure Active Directory.Azure Active Directory permet de vérifier que votre application est autorisée à accéder aux données commerciales stockées dans un client Dynamics 365.
S'authentifier à l'aide d'ADAL
L'authentification du service Web OAuth de base à l'aide d'ADAL est effectuée à l'aide de quelques lignes de code.
// 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));
Le contexte d'authentification est renvoyé à l'aide d'un fournisseur d'autorité bien connu. Lorsque vous ne connaissez pas le client Azure Active Directory associé à l'instance Dynamics 365 que vous appelez, vous pouvez utiliser une chaîne constante « https://login.windows.net/common », qui est l'autorité URL pour un scénario avec plusieurs utilisateurs. Une autre méthode pour découvrir dynamiquement l’autorité au moment de l’exécution est décrite plus loin dans cette rubrique.
La ligne suivante du code récupère le résultat d'authentification contenant le jeton d'accès que vous recherchez. Vous pouvez envoyer des demandes de message au service Web avec ce jeton.
Les valeurs de chaîne utilisées représentent d'autres éléments d'intérêt dans ce code. La variable de ressource contient l'adresse racine de TLS (Transport Layer Security) ou SSL (Secure Sockets Layer), y compris le domaine (organisation), de votre serveur Dynamics 365. Les variables clientId et redirectUrl contiennent les informations sur l’enregistrement de l’application suite à l'inscription de l'application auprès de Active Directory. Pour plus d’informations sur l’enregistrement de l’application, voir Guide pas-à-pas : Enregistrer une application Dynamics 365 auprès d'Azure Active Directory.
Utiliser le jeton d'accès dans les requêtes de message
Selon l'API Dynamics 365 que vous utilisez, il existe deux méthodes différentes pour envoyer une demande de messages aux services Web. Pour l'API Web, vous devez généralement envoyer une demande de message HTTP. Pour le service d'organisation, vous devez envoyer une demande de message à l'aide du proxy du client Web.
Demande de message HTTP
Une fois que vous avez le jeton d'accès, vous devez définir l'en-tête d'autorisation de la demande de message que vous envoyez au service Web en fonction de la valeur du jeton d'accès et spécifier le type du jeton « Bearer ». Pour plus d'informations sur l'en-tête d'autorisation, consultez la section 14.8 du protocole HTTP/1.1. Le code suivant illustre comment s'effectue cette opération via la classe System.Net.Http.HttpClient.
using (HttpClient httpClient = new HttpClient())
{
httpClient.Timeout = new TimeSpan(0, 2, 0); // 2 minutes
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", result.AccessToken);
Demandes de client Web
Définissez simplement la valeur d'une propriété HeaderToken en fonction du jeton d'accès en utilisant OrganizationWebProxyClient ou DiscoveryWebProxyClient du service d'organisation.
Actualiser le jeton d'accès
Il est d'usage d'actualiser le jeton d'accès avant chaque appel à une méthode de service Web Dynamics 365. Il s'agit d'une solution pour écrire du code qui vérifie la date et l'heure d'expiration du jeton et actualise le jeton lorsqu'il est sur le point d'expirer.
Pour actualiser le jeton d'accès, qui est mis en cache par ADAL, il suffit d'appeler à nouveau la méthode AcquireToken à l'aide du même contexte.
AuthenticationResult result = authContext.AcquireToken(resource, clientId, new Uri(redirectUrl));
Ensuite, vous devez définir à nouveau l'en-tête d'autorisation avec result.AccessToken en utilisant l'API Web, ou HeaderToken quand vous utilisez le service d'organisation.
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", result.AccessToken);
Découvrir l'autorité au moment de l'exécution
L'autorité d'authentification URL, et la ressource URL, peuvent être déterminées dynamiquement au moment de l'exécution à l'aide du code ADAL suivant. Il s'agit de la méthode recommandée à utiliser par rapport à l'autorité bien connue URL affichée précédemment dans un extrait de code.
AuthenticationParameters ap = AuthenticationParameters.CreateFromResourceUrlAsync(
new Uri("https://mydomain.crm.dynamics.com/api/data/")).Result;
String authorityUrl = ap.Authority;
String resourceUrl = ap.Resource;
Pour l'API Web, une autre méthode pour obtenir l'autorité URL consiste à envoyer un message quelconque au service Web ne spécifiant aucun jeton d'accès. On parle dans ce cas de non-remise temporaire. La réponse peut être analysée pour obtenir l'autorité URL.
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", “”);
Voir aussi
Guide pas-à-pas : Enregistrer une application Dynamics 365 auprès d'Azure Active Directory
Documentation à plusieurs facteurs d'authentification
OAuth 2.0
Microsoft Dynamics 365
© 2017 Microsoft. Tous droits réservés. Copyright