Elegir un proveedor de autenticación de Microsoft Graph según el escenarioChoose a Microsoft Graph authentication provider based on scenario

Los proveedores de autenticación implementan el código necesario para adquirir un token con la biblioteca de autenticación de Microsoft (MSAL); controlar una serie de errores potenciales para los casos como el consentimiento incremental, las contraseñas caducadas y el acceso condicional; y, a continuación, establezca el encabezado de autorización de solicitud HTTP.Authentication providers implement the code required to acquire a token using the Microsoft Authentication Library (MSAL); handle a number of potential errors for cases like incremental consent, expired passwords, and conditional access; and then set the HTTP request authorization header. En la siguiente tabla se muestra el conjunto de proveedores que coinciden con los escenarios para diferentes tipos de aplicaciones.The following table lists the set of providers that match the scenarios for different application types.

EscenarioScenario Flujo/concesiónFlow/Grant AudienciaAudience ProveedorProvider
Aplicación de una sola páginaSingle Page App
ImplícitaImplicit Usuario Delegado/orgDelegated Consumer/Org Proveedor implícitoImplicit Provider
Aplicación web que llama a las API WebWeb App that calls web APIs
Código de autorizaciónAuthorization Code Usuario Delegado/orgDelegated Consumer/Org Proveedor de código de autorizaciónAuthorization Code Provider
Credenciales de clienteClient Credentials Solo aplicaciónApp Only Proveedor de credenciales de clienteClient Credentials Provider
API Web que llama a las API WebWeb API that calls web APIs
En nombre deOn Behalf Of Usuario Delegado/orgDelegated Consumer/Org En nombre de proveedorOn Behalf Of Provider
Credenciales de clienteClient Credentials Solo aplicaciónApp Only Proveedor de credenciales de clienteClient Credentials Provider
Aplicación de escritorio que llama a las API WebDesktop app that calls web APIs
InteractiveInteractive Usuario Delegado/orgDelegated Consumer/Org Proveedor interactivoInteractive Provider
Integrada de WindowsIntegrated Windows Org delegadaDelegated Org Proveedor integrado de WindowsIntegrated Windows Provider
Propietario del recursoResource Owner Org delegadaDelegated Org Proveedor de nombre de usuario/contraseñaUsername / Password Provider
Código de dispositivoDevice Code Org delegadaDelegated Org Proveedor de código de dispositivoDevice Code Provider
Aplicación demonioDaemon app
Credenciales de clienteClient Credentials Solo aplicaciónApp Only Proveedor de credenciales de clienteClient Credentials Provider
Aplicación móvil que llama a las API WebMobile app that calls web APIs
InteractiveInteractive Usuario Delegado/orgDelegated Consumer/Org Proveedor interactivoInteractive Provider

Proveedor de código de autorizaciónAuthorization code provider

El flujo de código de autorización permite que las aplicaciones web y nativas obtengan tokens de forma segura en el nombre del usuario.The authorization code flow enables native and web apps to securely obtain tokens in the name of the user. Para obtener más información, consulte plataforma de identidades de Microsoft y flujo de código de autorización de OAuth 2,0.To learn more, see Microsoft identity platform and OAuth 2.0 authorization code flow.

IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithRedirectUri(redirectUri)
    .WithClientSecret(clientSecret) // or .WithCertificate(certificate)
    .Build();

AuthorizationCodeProvider authProvider = new AuthorizationCodeProvider(confidentialClientApplication, scopes);

Proveedor de credenciales de clienteClient credentials provider

El flujo de credenciales del cliente permite que las aplicaciones de servicio se ejecuten sin interacción del usuario.The client credential flow enables service applications to run without user interaction. El acceso se basa en la identidad de la aplicación.Access is based on the identity of the application. Para obtener más información, consulte Microsoft Identity Platform y el flujo de credenciales de cliente de OAuth 2,0.For more information, see Microsoft identity platform and the OAuth 2.0 client credentials flow.

IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithTenantId(tenantID)
    .WithClientSecret(clientSecret)
    .Build();

ClientCredentialProvider authProvider = new ClientCredentialProvider(confidentialClientApplication);

Proveedor en nombre deOn-behalf-of provider

El flujo "en nombre de" es aplicable cuando la aplicación llama a una API de servicio o web que, a su vez, llama a la API de Microsoft Graph.The on-behalf-of flow is applicable when your application calls a service/web API which in turns calls the Microsoft Graph API. Obtenga más información leyendo la plataforma de identidad de Microsoft y OAuth 2,0 en nombre de flujoLearn more by reading Microsoft identity platform and OAuth 2.0 On-Behalf-Of flow

IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithRedirectUri(redirectUri)
    .WithClientSecret(clientSecret)
    .Build();

OnBehalfOfProvider authProvider = new OnBehalfOfProvider(confidentialClientApplication, scopes);

Proveedor implícitoImplicit provider

El flujo de concesión implícita se usa en las aplicaciones basadas en el explorador.The implicit grant flow is used in browser-based applications. Para obtener más información, vea plataforma de identidad de Microsoft y flujo de concesión implícito.For more information, see Microsoft identity platform and Implicit grant flow.

No procede.Not applicable.

Proveedor de código de dispositivoDevice code provider

El flujo de código de dispositivo habilita el inicio de sesión en dispositivos por medio de otro dispositivo.The device code flow enables sign in to devices by way of another device. Para obtener más información, consulte Microsoft Identity Platform y el flujo de código de dispositivo OAuth 2,0.For details, see Microsoft identity platform and the OAuth 2.0 device code flow.

IPublicClientApplication publicClientApplication = PublicClientApplicationBuilder
            .Create(clientId)
            .Build();

Func<DeviceCodeResult, Task> deviceCodeReadyCallback = async dcr => await Console.Out.WriteLineAsync(dcr.Message);

DeviceCodeProvider authProvider = new DeviceCodeProvider(publicClientApplication, scopes, deviceCodeReadyCallback);

Proveedor integrado de WindowsIntegrated Windows provider

El flujo integrado de Windows permite que los equipos con Windows adquieran de forma silenciosa un token de acceso cuando están Unidos a un dominio.The integrated Windows flow provides a way for Windows computers to silently acquire an access token when they are domain joined. Para obtener más información, consulte autenticación integrada de Windows.For details, see Integrated Windows authentication.

IPublicClientApplication publicClientApplication = PublicClientApplicationBuilder
            .Create(clientId)
            .WithTenantId(tenantID)
            .Build();

IntegratedWindowsAuthenticationProvider authProvider = new IntegratedWindowsAuthenticationProvider(publicClientApplication, scopes);

Proveedor interactivoInteractive provider

El flujo interactivo lo usan las aplicaciones móviles (Xamarin y UWP) y las aplicaciones de escritorio para llamar a Microsoft Graph en el nombre de un usuario.The interactive flow is used by mobile applications (Xamarin and UWP) and desktops applications to call Microsoft Graph in the name of a user. Para obtener más información, vea adquirir tokens de forma interactiva.For details, see Acquiring tokens interactively.

IPublicClientApplication publicClientApplication = PublicClientApplicationBuilder
            .Create(clientId)
            .Build();

InteractiveAuthenticationProvider authProvider = new InteractiveAuthenticationProvider(publicClientApplication, scopes);

Proveedor de nombre de usuario/contraseñaUsername/password provider

El proveedor de nombre de usuario y contraseña permite que una aplicación inicie sesión en un usuario por medio de su nombre de usuario y contraseña.The username/password provider allows an application to sign in a user by using their username and password. Use este flujo solo cuando no pueda usar ninguno de los otros flujos de OAuth.Use this flow only when you cannot use any of the other OAuth flows. Para obtener más información, consulte la plataforma de identidad de Microsoft y la credencial de contraseña de propietario de recurso de OAuth 2,0For more information, see Microsoft identity platform and the OAuth 2.0 resource owner password credential

IPublicClientApplication publicClientApplication = PublicClientApplicationBuilder
            .Create(clientId)
            .WithTenantId(tenantID)
            .Build();

UsernamePasswordProvider authProvider = new UsernamePasswordProvider(publicClientApplication, scopes);

GraphServiceClient graphClient = new GraphServiceClient(authProvider);

User me = await graphClient.Me.Request()
                .WithUsernamePassword(email, password)
                .GetAsync();

Pasos siguientesNext steps