Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
Cette rubrique s’applique aux clients qui accèdent à Dynamics 365 Customer Engagement (sur site) via l’environnement Microsoft Online Services. Il existe plusieurs fournisseurs d’identité Dynamics 365 Customer Engagement (locaux) qui doivent être pris en compte lorsque vous développez une application qui se connecte aux services Web Organization ou Discovery. Ces fournisseurs peuvent être identifiés comme domaine géré, fédéré et compte Microsoft. Cette rubrique se concentre sur l’authentification du service Web Dynamics 365 Customer Engagement (sur site) avec des fournisseurs de domaine managé et d’identité fédérée, bien que les mêmes classes et le même code présentés ici fonctionnent également avec tous les fournisseurs d’identité pris en charge et les types de déploiement Dynamics 365 Customer Engagement (sur site).
Utiliser les classes d’authentification simplifiées
Vous pouvez utiliser les OrganizationServiceProxy classes et DiscoveryServiceProxy lors de l’authentification auprès des services Web.
Pour plus d’informations sur l’utilisation de ces classes de proxy , consultez Authentification à l’aide des classes de proxy client.
Remarque
L’exemple de code d’assistance contenant la classe ServerConnection
n’est plus conservé et sera supprimé dans le futur. Au lieu de cela, utilisez l'une des API d'authentification prises en charge dans les assemblies SDK comme CrmServiceClient.
Une autre approche d’authentification consiste à utiliser le code source d’assistance fourni dans le SDK. La ServerConnection
classe d’assistance, illustrée dans Code d’assistance : Classe ServerConnection, fournit GetOrganizationProxy
et GetProxy
méthodes pour l'authentification.
Si vous regardez le code source de ServerConnection
, vous verrez que GetOrganizationProxy
appelle en fait GetProxy
.
using ( OrganizationServiceProxy orgServiceProxy = ServerConnection.GetOrganizationProxy(serverConfig) ) { }
Vous devez créer ces objets proxy d’organisation ou de service de découverte dans une instruction using
pour disposer correctement du proxy du service, ou vous devez appeler Dispose
directement. Pour obtenir un exemple de code qui utilise la méthode du code d’assistance GetOrganizationProxy
, consultez Exemple : démarrage rapide.
La liste complète des classes d’authentification disponibles dans les assemblys SDK s’affiche dans la section Classes d’authentification .
Authentifier les utilisateurs d’un compte Microsoft avec Office 365
Votre application doit prendre en charge les utilisateurs de Dynamics 365 Customer Engagement (local) dont l’organisation est passée du fournisseur d’identité de compte Microsoft au fournisseur d’identité Microsoft Online Services. Dans ce scénario, les utilisateurs peuvent fournir leurs informations d’identification de connexion au compte Microsoft lorsqu’ils s’authentifient auprès du fournisseur d’identité Microsoft Online Services de Dynamics 365 Customer Engagement (local).
Pour cela, passez les informations d’identification renseignées dans le constructeur OrganizationServiceProxy ou la méthode AuthenticationCredentials de la classe IServiceManagement
. Les valeurs d’informations d’identification sont renseignées comme suit :
AuthenticationCredentials.ClientCredentials = <Microsoft account sign-in credentials>
AuthenticationCredentials.SupportingCredentials.ClientCredentials = <device credentials>
Si votre code vérifie le type de fournisseur d’identité pour déterminer comment s’authentifier, un code supplémentaire est requis. Consultez la GetCredentials
méthode dans la section suivante pour obtenir un exemple de code qui prend en charge les utilisateurs de compte Microsoft transférés.
Pour plus d’informations sur cette transition, voir Intégration de Dynamics 365 Customer Engagement (on-premises) avec Office 365.
Présentation approfondie de l’authentification
La discussion précédente a présenté deux approches simples qui peuvent être utilisées pour authentifier un utilisateur avec les services Web Dynamics 365 Customer Engagement (on-premises). Les informations suivantes montrent comment authentifier un utilisateur à l’aide de la IServiceManagement<TService> classe et incluent le code source de la GetProxy
méthode.
Pour voir l’exemple complet qui contient les exemples suivants, voir Exemple : Authentifier les utilisateurs Office 365. Vous remarquerez que l’authentification à ce niveau prend beaucoup plus de code.
L’exemple de code suivant illustre les classes et les méthodes que vous pouvez utiliser dans votre application pour authentifier un utilisateur Office 365/MOS à l’aide des services Web Dynamics 365 Customer Engagement (on-premises).
IServiceManagement<IOrganizationService> orgServiceManagement =
ServiceConfigurationFactory.CreateManagement<IOrganizationService>(
new Uri(organizationUri));
// Set the credentials.
AuthenticationCredentials credentials = GetCredentials(orgServiceManagement, endpointType);
// Get the organization service proxy.
using (OrganizationServiceProxy organizationProxy =
GetProxy<IOrganizationService, OrganizationServiceProxy>(orgServiceManagement, credentials))
{
// This statement is required to enable early-bound type support.
organizationProxy.EnableProxyTypes();
// Now make an SDK call with the organization service proxy.
// Display information about the logged on user.
Guid userid = ((WhoAmIResponse)organizationProxy.Execute(
new WhoAmIRequest())).UserId;
SystemUser systemUser = organizationProxy.Retrieve("systemuser", userid,
new ColumnSet(new string[] { "firstname", "lastname" })).ToEntity<SystemUser>();
Console.WriteLine("Logged on user is {0} {1}.",
systemUser.FirstName, systemUser.LastName);
}
Le code crée un IServiceManagement<TService> objet pour le service Organisation. Un objet de type AuthenticationCredentials est utilisé pour contenir les informations d’identification de connexion de l’utilisateur. Les informations d’identification de l'utilisateur et l'objet IServiceManagement
sont ensuite transmises à GetProxy
pour obtenir la référence du proxy du service Web.
/// <summary>
/// Obtain the AuthenticationCredentials based on AuthenticationProviderType.
/// </summary>
/// <param name="service">A service management object.</param>
/// <param name="endpointType">An AuthenticationProviderType of the CRM environment.</param>
/// <returns>Get filled credentials.</returns>
private AuthenticationCredentials GetCredentials<TService>(IServiceManagement<TService> service, AuthenticationProviderType endpointType)
{
AuthenticationCredentials authCredentials = new AuthenticationCredentials();
switch (endpointType)
{
case AuthenticationProviderType.ActiveDirectory:
authCredentials.ClientCredentials.Windows.ClientCredential =
new System.Net.NetworkCredential(_userName,
_password,
_domain);
break;
case AuthenticationProviderType.LiveId:
authCredentials.ClientCredentials.UserName.UserName = _userName;
authCredentials.ClientCredentials.UserName.Password = _password;
authCredentials.SupportingCredentials = new AuthenticationCredentials();
authCredentials.SupportingCredentials.ClientCredentials =
Microsoft.Crm.Services.Utility.DeviceIdManager.LoadOrRegisterDevice();
break;
default: // For Federated and OnlineFederated environments.
authCredentials.ClientCredentials.UserName.UserName = _userName;
authCredentials.ClientCredentials.UserName.Password = _password;
// For OnlineFederated single-sign on, you could just use current UserPrincipalName instead of passing user name and password.
// authCredentials.UserPrincipalName = UserPrincipal.Current.UserPrincipalName; // Windows Kerberos
// The service is configured for User Id authentication, but the user might provide Microsoft
// account credentials. If so, the supporting credentials must contain the device credentials.
if (endpointType == AuthenticationProviderType.OnlineFederation)
{
IdentityProvider provider = service.GetIdentityProvider(authCredentials.ClientCredentials.UserName.UserName);
if (provider != null && provider.IdentityProviderType == IdentityProviderType.LiveId)
{
authCredentials.SupportingCredentials = new AuthenticationCredentials();
authCredentials.SupportingCredentials.ClientCredentials =
Microsoft.Crm.Services.Utility.DeviceIdManager.LoadOrRegisterDevice();
}
}
break;
}
return authCredentials;
}
L’objet AuthenticationCredentials est configuré en fonction de l’identité abonnée pour l’utilisateur connecté. Notez que les informations d’identification de l’utilisateur pour tous les types de fournisseurs d’identité sont affichées. Le cas par défaut gère le domaine géré par Office 365/MOS, les utilisateurs en ligne dont les identités sont fédérées dans le cloud et les utilisateurs de comptes Microsoft en transition. Voyons maintenant ce que GetProxy
fait réellement.
private TProxy GetProxy<TService, TProxy>(
IServiceManagement<TService> serviceManagement,
AuthenticationCredentials authCredentials)
where TService : class
where TProxy : ServiceProxy<TService>
{
Type classType = typeof(TProxy);
if (serviceManagement.AuthenticationType !=
AuthenticationProviderType.ActiveDirectory)
{
AuthenticationCredentials tokenCredentials =
serviceManagement.Authenticate(authCredentials);
// Obtain discovery/organization service proxy for Federated, LiveId and OnlineFederated environments.
// Instantiate a new class of type using the 2 parameter constructor of type IServiceManagement and SecurityTokenResponse.
return (TProxy)classType
.GetConstructor(new Type[] { typeof(IServiceManagement<TService>), typeof(SecurityTokenResponse) })
.Invoke(new object[] { serviceManagement, tokenCredentials.SecurityTokenResponse });
}
// Obtain discovery/organization service proxy for ActiveDirectory environment.
// Instantiate a new class of type using the 2 parameter constructor of type IServiceManagement and ClientCredentials.
return (TProxy)classType
.GetConstructor(new Type[] { typeof(IServiceManagement<TService>), typeof(ClientCredentials) })
.Invoke(new object[] { serviceManagement, authCredentials.ClientCredentials });
}
Pour tous les déploiements autres que locaux (Active Directory, sans revendications), la Authenticate(AuthenticationCredentials) méthode est appelée, puis le proxy de service est instancié. Notez que les informations d’identification d’authentification renvoyées à partir de Authenticate
contiennent la réponse du jeton de sécurité qui est utilisée dans le constructeur du proxy de service. La méthode générique GetProxy
illustrée précédemment peut être utilisée pour obtenir une référence d’objet à OrganizationServiceProxy ou DiscoveryServiceProxy.
Voir aussi
Se connecter à Microsoft Office 365 et Dynamics 365 Customer Engagement (on-premises)Exemple : Authentifier les utilisateurs Office 365
Code d’assistance : Classe ServerConnection
Active Directory et authentification basée sur les revendications
Utiliser des chaînes de connexion dans les outils XRM pour se connecter à Dynamics 365 Customer Engagement (sur site)