Godkende Office 365-brugere med Microsoft Dynamics CRM Online-webtjenester
Udgivet: november 2016
Gælder for: Dynamics CRM 2015
Dette emne gælder for kunder, der har adgang til Microsoft Dynamics CRM Online gennem Microsoft Online Services-miljø. Der er flere Microsoft Dynamics CRM Online-id-udbydere, der skal redegøres for, når du udvikler et program, der opretter forbindelse til organisations- eller registreringswebtjenesten. Disse udbydere kan identificeres som administreret domæne, organisationsnetværk og Microsoft-konto. Dette emne fokuserer på Microsoft Dynamics CRM Online-webtjenestegodkendelse med administrerede domæne- og organisationsnetværksudbydere, men samme klasser og kode, der vises her, virker også med alle understøttede id-udbydere og Microsoft Dynamics 365-udrulningstyper.
Dette emne indeholder
Anvende de forenklede godkendelsesklasser
Godkende brugere af Microsoft-konto med Office 365
Dybdegående godkendelse
Anvende de forenklede godkendelsesklasser
Du kan bruge klasserne OrganizationServiceProxy og DiscoveryServiceProxy til godkendelse hos webtjenesterne. Du kan finde flere oplysninger om brug af disse proxyklasser i Godkendelse ved hjælp af klientproxyklasser.
En anden fremgangsmåde for godkendelse bruger CrmConnection-klassen. Med blot et par linjer kode kan dit program bruge godkendelse hos webtjenester og starte kald af webmetoder. Du kan finde flere oplysninger om klassen CrmConnection i Forenklet forbindelse til Microsoft Dynamics CRM 2015. Eksempelkode findes i emnet Eksempel: Forenklet forbindelse for hurtig start ved hjælp af Microsoft Dynamics CRM.
CrmConnection connection = CrmConnection.Parse (connectionString);
using ( OrganizationService orgService = new OrganizationService(connection)) { }
En anden fremgangsmåde for godkendelse er at bruge hjælpekildekode, der findes i SDK.ServerConnection-hjælpeklassen, der vises i emnet Hjælpekode: ServerConnection-klasse, har GetOrganizationProxy- og GetProxy-metoder for godkendelse. Hvis du ser på kildekoden for ServerConnection, du vil se, at GetOrganizationProxy faktisk kalder GetProxy.
using ( OrganizationServiceProxy orgServiceProxy = ServerConnection.GetOrganizationProxy(serverConfig) ) { }
Du skal oprette disse organisations- eller registreringsservice-proxyobjekter i en using-sætning for korrekt at bortskaffe serviceproxy eller kalde Dispose direkte. Eksempelkode, som bruger GetOrganizationProxy-hjælpekodemetoden, findes i Eksempel: Startvejledning til Microsoft Dynamics CRM.
En komplet liste over godkendelsesklasser, der er tilgængelige i Microsoft Dynamics CRM SDK, er vist i afsnittet Godkendelsesklasser.
Godkende brugere af Microsoft-konto med Office 365
Dit program skal understøtte de Microsoft Dynamics CRM Online-brugere, hvis organisation er gået fra Microsoft-konto som identitetsudbyder til Microsoft Online Services som identitetsudbyder. I dette scenario kan brugerne angive deres Microsoft-konto-logonlegitimationsoplysninger, når de godkender hos Microsoft Online Services-identitetsudbyderen af Microsoft Dynamics CRM Online.
For at gøre dette skal du overføre de udfyldte logonoplysninger i OrganizationServiceProxy-konstruktøren eller Authenticate-metoden til IServiceManagement-klassen. Værdierne i legitimationsoplysningerne udfyldes på følgende måde:
AuthenticationCredentials.ClientCredentials = <Microsoft account logon credentials>
AuthenticationCredentials.SupportingCredentials.ClientCredentials = <device credentials>
Du kan hente legitimationsoplysningerne for enheden ved hjælp af de offentlige metoder, for eksempel LoadOrRegister, i DeviceIdManager-hjælpekode. Du kan finde flere oplysninger i Hjælpekode: DeviceIdManager-klasse.
Hvis din kode kontrollerer typen af identitetsudbyder for at bestemme, hvordan der skal godkendes, er yderligere kode nødvendig. Se GetCredentials-metoden i næste afsnit med eksempelkode, der understøtter overførte Microsoft-konto-brugere.
Du kan finde flere oplysninger om denne overførsel i Integration af Microsoft Dynamics CRM Online med Office 365.
Dybdegående godkendelse
Den foregående beskrivelse introducerer to enkle metoder, der kan bruges til at godkende en bruger med Microsoft Dynamics 365-webtjenester. Følgende oplysninger viser, hvordan du godkender en bruger ved hjælp af IServiceManagement<TService>-klassen, og indeholder kildekoden til GetProxy-metoden. Du kan se hele eksemplet, der indeholder følgende eksempler, i Eksempel: Godkende brugere med Microsoft Dynamics CRM-webtjenester. Du vil bemærke, at godkendelse på dette niveau bruger meget mere kode.
Følgende eksempelkode demonstrerer de klasser og metoder, der kan bruges i programmet til at godkende en Office 365/MOS-bruger ved hjælp af Microsoft Dynamics CRM Online-webtjenester.
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);
}
Dim orgServiceManagement As IServiceManagement(Of IOrganizationService) =
ServiceConfigurationFactory.CreateManagement(Of IOrganizationService)(New Uri(organizationUri))
' Set the credentials.
Dim credentials As AuthenticationCredentials = GetCredentials(endpointType_renamed)
' Get the organization service proxy.
Using organizationProxy As OrganizationServiceProxy =
GetProxy(Of 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.
Dim userid As Guid = (CType(organizationProxy.Execute(New WhoAmIRequest()),
WhoAmIResponse)).UserId
Dim systemUser_renamed As SystemUser =
organizationProxy.Retrieve("systemuser",
userid,
New ColumnSet(New String() {"firstname",
"lastname"})).ToEntity(Of SystemUser)()
Console.WriteLine("Logged on user is {0} {1}.",
systemUser_renamed.FirstName, systemUser_renamed.LastName)
End Using
Koden opretter et IServiceManagement<TService>-objekt for organisationstjenesten. Et objekt af typen AuthenticationCredentials bruges til at indeholde brugerens logonoplysninger.IServiceManagement-objektet og brugerlegitimationsoplysningerne sendes derefter til GetProxy for at hente webtjenestens proxyreference.
/// <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;
}
''' <summary>
''' Obtain the AuthenticationCredentials based on AuthenticationProviderType.
''' </summary>
''' <param name="endpointType">An AuthenticationProviderType of the CRM environment.</param>
''' <returns>Get filled credentials.</returns>
Private Function GetCredentials(ByVal endpointType As AuthenticationProviderType) As AuthenticationCredentials
Dim authCredentials As New AuthenticationCredentials()
Select Case endpointType
Case AuthenticationProviderType.ActiveDirectory
authCredentials.ClientCredentials.Windows.ClientCredential =
New System.Net.NetworkCredential(_userName, _password, _domain)
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()
Case Else ' 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
End Select
Return authCredentials
End Function
AuthenticationCredentials-objektet er konfigureret i henhold til abonnementsidentiteten for den bruger, der er logget på. Bemærk, at brugerens legitimationsoplysninger til alle typer af id-udbydere vises. Standardsagen håndterer Microsoft Office 365/MOS-administrerede domæneonlinebrugere, hvis identitet har organisationsnetværk i skyen, og overførte Microsoft-konto-brugere. Lad os se på, hvad GetProxy rent faktisk udfører.
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 });
}
Private Function GetProxy(Of TService As Class,
TProxy As ServiceProxy(Of TService)) _
(ByVal serviceManagement As IServiceManagement(Of TService),
ByVal authCredentials As AuthenticationCredentials) As TProxy
Dim classType As Type = GetType(TProxy)
If serviceManagement.AuthenticationType <>
AuthenticationProviderType.ActiveDirectory Then
Dim tokenCredentials As AuthenticationCredentials =
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 CType(classType _
.GetConstructor(New Type() {GetType(IServiceManagement(Of TService)), GetType(SecurityTokenResponse)}) _
.Invoke(New Object() {serviceManagement, tokenCredentials.SecurityTokenResponse}), TProxy)
End If
' 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 CType(classType _
.GetConstructor(New Type() {GetType(IServiceManagement(Of TService)), GetType(ClientCredentials)}) _
.Invoke(New Object() {serviceManagement, authCredentials.ClientCredentials}), TProxy)
End Function
For alle udrulninger, der ikke er i det lokale miljø (Active Directory, uden krav), kaldes Authenticate-metoden, og derefter instantieres serviceproxy. Bemærk, at legitimationsoplysningerne, der blev returneret fra Authenticate, indeholder det sikkerhedstokensvar, der bruges i serviceproxy-konstruktøren. Den generiske GetProxy-metode, der tidligere er vist, kan kun bruges til at hente en objektreference til enten OrganizationServiceProxy eller DiscoveryServiceProxy.
Se også
Opret forbindelse til Microsoft Office 365 og Microsoft Dynamics CRM Online
Synkroniserede brugere i Microsoft Dynamics CRM Online og Office 365
Eksempel: Godkende brugere med Microsoft Dynamics CRM-webtjenester
Hjælpekode: ServerConnection-klasse
Active Directory og kravsbaseret godkendelse
Forenklet forbindelse til Microsoft Dynamics CRM 2015
© 2017 Microsoft. Alle rettigheder forbeholdes. Ophavsret