Dijeli putem


Provjera autentičnosti korisnika sustava Office 365 pomoću web-servisa Customer Engagement

Ova se tema odnosi na klijente koji pristupaju sustavu Dynamics 365 Customer Engagement (on-premises) putem okruženja Microsoft Online Services. Postoji više davatelja identiteta sustava Dynamics 365 Customer Engagement (on-premises) koji se moraju uzeti u obzir prilikom razvoja aplikacije koja se povezuje s web-uslugama tvrtke ili ustanove ili otkrivanja. Ti se davatelji usluga mogu identificirati kao upravljana domena, vanjski i Microsoftov račun. Ova se tema usredotočuje na provjeru autentičnosti web-usluge sustava Dynamics 365 Customer Engagement (on-premises) s upravljanim davateljima domena i vanjskim davateljima identiteta, iako isti klase i kôd prikazani ovdje funkcioniraju i sa svim podržanim davateljima identiteta i vrstama implementacije sustava Dynamics 365 Customer Engagement (on-premises).

Korištenje pojednostavljenih klasa provjere autentičnosti

Možete koristiti i DiscoveryServiceProxy klase OrganizationServiceProxy prilikom provjere autentičnosti s web uslugama.
Dodatne informacije o korištenju tih klasa proxyja potražite u članku Provjera autentičnosti pomoću klasa proxyja klijenta.

Napomena

Primjer pomoćnog koda koji sadrži klasu ServerConnection više se ne održava i bit će uklonjen neko vrijeme u budućnosti. Umjesto toga, upotrijebite jedan od podržanih API-ja za provjeru autentičnosti u sklopovima SDK-a, kao što je CrmServiceClient.

Drugi pristup provjeri autentičnosti je korištenje pomoćnog izvornog koda navedenog u SDK-u. Pomoćna ServerConnection klasa, prikazana u Pomoćnom kodu: ServerConnection Class, pruža GetOrganizationProxy i metode za provjeru GetProxy autentičnosti. Ako pogledate izvorni kod za ServerConnection, vidjet ćete da zapravo GetOrganizationProxy poziva GetProxy.

using ( OrganizationServiceProxy orgServiceProxy = ServerConnection.GetOrganizationProxy(serverConfig) ) { }  

Morate stvoriti te objekte proxyja tvrtke ili ustanove ili servisa using za otkrivanje u izjavi da biste ispravno riješili proxy usluge ili izravno nazvali Dispose . Ogledni kôd koji koristi metodu pomoćnog GetOrganizationProxy koda potražite u članku Primjer: Brzi početak.

Potpuni popis klasa provjere autentičnosti dostupnih u sklopovima SDK-a prikazan je u odjeljku Klase provjere autentičnosti .

Provjera autentičnosti korisnika Microsoftova računa pomoću sustava Office 365

Vaša aplikacija mora podržavati one korisnike sustava Dynamics 365 Customer Engagement (on-premises) čija je tvrtka ili ustanova prebačena s davatelja identiteta Microsoftova računa na davatelja identiteta Microsoft Online Services. U ovom scenariju korisnici mogu navesti vjerodajnice za prijavu na Microsoftov račun prilikom provjere autentičnosti kod davatelja identiteta Microsoft Online Services sustava Dynamics 365 Customer Engagement (on-premises).

Da biste to učinili, proslijedite popunjene vjerodajnice u konstruktoru OrganizationServiceProxy ili metodi AuthenticationCredentials klase IServiceManagement . Vrijednosti vjerodajnica popunjavaju se na sljedeći način:

AuthenticationCredentials.ClientCredentials = <Microsoft account sign-in credentials>  
AuthenticationCredentials.SupportingCredentials.ClientCredentials = <device credentials>  

Ako vaš kod provjerava vrstu davatelja identiteta da bi odredio kako se autentificira, potreban je dodatni kod. Pogledajte metodu GetCredentials u sljedećem odjeljku za ogledni kôd koji podržava korisnike Microsoftova računa u prijelazu.

Dodatne informacije o tom prijelazu potražite u članku Integracija sustava Dynamics 365 Customer Engagement (on-premises) sa sustavom Office 365.

Dubinski pregled provjere autentičnosti

U prethodnoj raspravi predstavljena su dva jednostavna pristupa koji se mogu koristiti za provjeru autentičnosti korisnika pomoću web-servisa Dynamics 365 Customer Engagement (on-premises). Sljedeće informacije pokazuju kako provjeriti autentičnost korisnika pomoću klase IServiceManagement<TService> i uključuju izvorni kod u metodu GetProxy . Da biste vidjeli potpuni uzorak koji sadrži sljedeće primjere, pročitajte članak Primjer: provjera autentičnosti korisnika sustava Office 365. Primijetit ćete da autentifikacija na ovoj razini zahtijeva puno više koda.

Sljedeći primjer koda prikazuje klase i metode koje možete koristiti u svojoj aplikaciji za provjeru autentičnosti korisnika sustava Office 365/MOS pomoću web-usluga 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);
}

Kôd stvara IServiceManagement<TService> objekt za uslugu Organizacija. Objekt vrste AuthenticationCredentials koristi se za sadržavanje korisnikovih vjerodajnica za prijavu. Vjerodajnice IServiceManagement objekta i korisnika zatim se prosljeđuju GetProxy kako bi se dobila referenca proxyja web-usluge.



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

Objekt AuthenticationCredentials je konfiguriran prema pretplaćenom identitetu za prijavljenog korisnika. Imajte na umu da su prikazane korisničke vjerodajnice za sve vrste davatelja identiteta. Zadani slučaj obrađuje upravljanu domenu sustava Office 365/MOS, mrežne korisnike čiji su identiteti združeni u oblaku i prenesene korisnike Microsoftova računa. Pogledajmo sada što GetProxy zapravo radi.



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

 

Za sve implementacije osim lokalnog (Active Directory, bez zahtjeva), Authenticate(AuthenticationCredentials) metoda se poziva, a zatim se instancira proxy usluge. Imajte na umu da vjerodajnice za provjeru autentičnosti vraćene iz Authenticate sadrže odgovor sigurnosnog tokena koji se koristi u konstruktoru proxy servisa. Prethodno prikazana generička GetProxy metoda može se koristiti za dobivanje reference objekta na bilo ili DiscoveryServiceProxyOrganizationServiceProxy .

Pogledajte

Povezivanje sa sustavom Microsoft Office 365 i sustavom Dynamics 365 Customer Engagement (on-premises)Primjer: Provjera autentičnosti korisnika sustava Office 365
Pomoćni kod: Klasa ServerConnection
Active Directory i provjera autentičnosti na temelju zahtjeva
Korištenje nizova za povezivanje u XRM alatima za povezivanje sa sustavom Dynamics 365 Customer Engagement (on-premises)