Choisir un fournisseur d'authentification Microsoft Graph en fonction du scénario
Les fournisseurs d’authentification implémentent le code nécessaire pour acquérir un jeton à l’aide de la bibliothèque d’authentification Microsoft (MSAL) ; gérer un certain nombre d’erreurs potentielles pour des cas tels que le consentement incrémentiel, les mots de passe expirés et l’accès conditionnel ; puis définissez l’en-tête d’autorisation de requête HTTP. Le tableau suivant répertorie l’ensemble des fournisseurs qui correspondent aux scénarios pour différents types d’applications.
Scénario | Flux/Octroi | Audience | Fournisseur |
---|---|---|---|
Application monopage | Code d’autorisation avec PKCE | Consommateur délégué/organisation | Fournisseur de code d’autorisation |
Application web qui appelle des API web | |||
Code d’autorisation | Consommateur délégué/organisation | Fournisseur de code d’autorisation | |
Informations d’identification du client | Application uniquement | Fournisseur d’informations d’identification du client | |
API web qui appelle des API web | |||
Au nom de | Consommateur délégué/organisation | Fournisseur au nom de | |
Informations d’identification du client | Application uniquement | Fournisseur d’informations d’identification du client | |
Application de bureau qui appelle des API web | |||
Interactives | Consommateur délégué/organisation | Fournisseur interactif | |
Fenêtres intégrées | Organisation déléguée | Fournisseur Windows intégré | |
Propriétaire de la ressource | Organisation déléguée | Fournisseur de nom d’utilisateur/mot de passe | |
Code de l’appareil | Organisation déléguée | Fournisseur de code d’appareil | |
Application Démon | |||
Informations d’identification du client | Application uniquement | Fournisseur d’informations d’identification du client | |
Application mobile qui appelle des API web | |||
Interactives | Consommateur délégué/organisation | Fournisseur interactif |
Notes
Les extraits de code suivants ont été écrits avec les dernières versions de leurs kits SDK respectifs. Si vous rencontrez des erreurs du compilateur avec ces extraits de code, vérifiez que vous disposez des dernières versions. Les fournisseurs d’authentification utilisés sont fournis par les bibliothèques Azure Identity suivantes :
- Les développeurs .NET doivent ajouter le package Azure.Identity .
- Les développeurs JavaScript doivent ajouter la bibliothèque @azure/identity .
- Les développeurs Java et Android doivent ajouter la bibliothèque azure-identity .
Fournisseur de code d’autorisation
Le flux de code d’autorisation permet aux applications natives et web d’obtenir en toute sécurité des jetons au nom de l’utilisateur. Pour plus d’informations, consultez Plateforme d'identités Microsoft et le flux de code d’autorisation OAuth 2.0.
var scopes = new[] { "User.Read" };
// Multi-tenant apps can use "common",
// single-tenant apps must use the tenant ID from the Azure portal
var tenantId = "common";
// Values from app registration
var clientId = "YOUR_CLIENT_ID";
var clientSecret = "YOUR_CLIENT_SECRET";
// For authorization code flow, the user signs into the Microsoft
// identity platform, and the browser is redirected back to your app
// with an authorization code in the query parameters
var authorizationCode = "AUTH_CODE_FROM_REDIRECT";
// using Azure.Identity;
var options = new TokenCredentialOptions
{
AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
};
// https://docs.microsoft.com/dotnet/api/azure.identity.authorizationcodecredential
var authCodeCredential = new AuthorizationCodeCredential(
tenantId, clientId, clientSecret, authorizationCode, options);
var graphClient = new GraphServiceClient(authCodeCredential, scopes);
Fournisseur d’informations d’identification du client
Le flux d’informations d’identification du client permet aux applications de service de s’exécuter sans interaction de l’utilisateur. L’accès est basé sur l’identité de l’application. Pour plus d’informations, consultez Plateforme d'identités Microsoft et le flux d’informations d’identification du client OAuth 2.0.
Utilisation d’une clé secrète client
// The client credentials flow requires that you request the
// /.default scope, and preconfigure your permissions on the
// app registration in Azure. An administrator must grant consent
// to those permissions beforehand.
var scopes = new[] { "https://graph.microsoft.com/.default" };
// Multi-tenant apps can use "common",
// single-tenant apps must use the tenant ID from the Azure portal
var tenantId = "common";
// Values from app registration
var clientId = "YOUR_CLIENT_ID";
var clientSecret = "YOUR_CLIENT_SECRET";
// using Azure.Identity;
var options = new TokenCredentialOptions
{
AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
};
// https://docs.microsoft.com/dotnet/api/azure.identity.clientsecretcredential
var clientSecretCredential = new ClientSecretCredential(
tenantId, clientId, clientSecret, options);
var graphClient = new GraphServiceClient(clientSecretCredential, scopes);
Utilisation d’un certificat client
var scopes = new[] { "https://graph.microsoft.com/.default" };
// Multi-tenant apps can use "common",
// single-tenant apps must use the tenant ID from the Azure portal
var tenantId = "common";
// Values from app registration
var clientId = "YOUR_CLIENT_ID";
var clientCertificate = new X509Certificate2("MyCertificate.pfx");
// using Azure.Identity;
var options = new TokenCredentialOptions
{
AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
};
// https://docs.microsoft.com/dotnet/api/azure.identity.clientcertificatecredential
var clientCertCredential = new ClientCertificateCredential(
tenantId, clientId, clientCertificate, options);
var graphClient = new GraphServiceClient(clientCertCredential, scopes);
Fournisseur au nom de
Le flux de nom s’applique lorsque votre application appelle un service/une API web qui, à son tour, appelle le API Graph Microsoft. En savoir plus en lisant Plateforme d'identités Microsoft et le flux On-Behalf-Of OAuth 2.0
Le Azure.Identity
package ne prend pas en charge le flux on-behalf-of à compter de la version 1.4.0. Créez plutôt un fournisseur d’authentification personnalisé à l’aide de MSAL.
var scopes = new[] { "User.Read" };
// Multi-tenant apps can use "common",
// single-tenant apps must use the tenant ID from the Azure portal
var tenantId = "common";
// Values from app registration
var clientId = "YOUR_CLIENT_ID";
var clientSecret = "YOUR_CLIENT_SECRET";
// using Azure.Identity;
var options = new TokenCredentialOptions
{
AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
};
// This is the incoming token to exchange using on-behalf-of flow
var oboToken = "JWT_TOKEN_TO_EXCHANGE";
var cca = ConfidentialClientApplicationBuilder
.Create(clientId)
.WithTenantId(tenantId)
.WithClientSecret(clientSecret)
.Build();
// DelegateAuthenticationProvider is a simple auth provider implementation
// that allows you to define an async function to retrieve a token
// Alternatively, you can create a class that implements IAuthenticationProvider
// for more complex scenarios
var authProvider = new DelegateAuthenticationProvider(async (request) => {
// Use Microsoft.Identity.Client to retrieve token
var assertion = new UserAssertion(oboToken);
var result = await cca.AcquireTokenOnBehalfOf(scopes, assertion).ExecuteAsync();
request.Headers.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", result.AccessToken);
});
var graphClient = new GraphServiceClient(authProvider);
Fournisseur implicite
Le flux d’authentification implicite n’est pas recommandé en raison de ses inconvénients. Les clients publics tels que les applications natives et les applications JavaScript doivent désormais utiliser le flux de code d’autorisation avec l’extension PKCE à la place. Référence.
Fournisseur de code d’appareil
Le flux de code de l’appareil permet de se connecter aux appareils au moyen d’un autre appareil. Pour plus d’informations, consultez Plateforme d'identités Microsoft et le flux de code de l’appareil OAuth 2.0.
var scopes = new[] { "User.Read" };
// Multi-tenant apps can use "common",
// single-tenant apps must use the tenant ID from the Azure portal
var tenantId = "common";
// Value from app registration
var clientId = "YOUR_CLIENT_ID";
// using Azure.Identity;
var options = new TokenCredentialOptions
{
AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
};
// Callback function that receives the user prompt
// Prompt contains the generated device code that use must
// enter during the auth process in the browser
Func<DeviceCodeInfo, CancellationToken, Task> callback = (code, cancellation) => {
Console.WriteLine(code.Message);
return Task.FromResult(0);
};
// https://docs.microsoft.com/dotnet/api/azure.identity.devicecodecredential
var deviceCodeCredential = new DeviceCodeCredential(
callback, tenantId, clientId, options);
var graphClient = new GraphServiceClient(deviceCodeCredential, scopes);
Fournisseur Windows intégré
Le flux Windows intégré permet aux ordinateurs Windows d’acquérir silencieusement un jeton d’accès lorsqu’ils sont joints à un domaine. Pour plus d’informations, consultez Authentification Windows intégrées.
Le Azure.Identity
package ne prend actuellement pas en charge l’authentification intégrée Windows. Créez plutôt un fournisseur d’authentification personnalisé à l’aide de MSAL.
var scopes = new[] { "User.Read" };
// Multi-tenant apps can use "common",
// single-tenant apps must use the tenant ID from the Azure portal
var tenantId = "common";
// Value from app registration
var clientId = "YOUR_CLIENT_ID";
var pca = PublicClientApplicationBuilder
.Create(clientId)
.WithTenantId(tenantId)
.Build();
// DelegateAuthenticationProvider is a simple auth provider implementation
// that allows you to define an async function to retrieve a token
// Alternatively, you can create a class that implements IAuthenticationProvider
// for more complex scenarios
var authProvider = new DelegateAuthenticationProvider(async (request) => {
// Use Microsoft.Identity.Client to retrieve token
var result = await pca.AcquireTokenByIntegratedWindowsAuth(scopes).ExecuteAsync();
request.Headers.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", result.AccessToken);
});
var graphClient = new GraphServiceClient(authProvider);
Fournisseur interactif
Le flux interactif est utilisé par les applications mobiles (Xamarin et UWP) et les applications de bureau pour appeler Microsoft Graph au nom d’un utilisateur. Pour plus d’informations, consultez Acquisition de jetons de manière interactive.
var scopes = new[] { "User.Read" };
// Multi-tenant apps can use "common",
// single-tenant apps must use the tenant ID from the Azure portal
var tenantId = "common";
// Value from app registration
var clientId = "YOUR_CLIENT_ID";
// using Azure.Identity;
var options = new InteractiveBrowserCredentialOptions
{
TenantId = tenantId,
ClientId = clientId,
AuthorityHost = AzureAuthorityHosts.AzurePublicCloud,
// MUST be http://localhost or http://localhost:PORT
// See https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/wiki/System-Browser-on-.Net-Core
RedirectUri = new Uri("http://localhost"),
};
// https://docs.microsoft.com/dotnet/api/azure.identity.interactivebrowsercredential
var interactiveCredential = new InteractiveBrowserCredential(options);
var graphClient = new GraphServiceClient(interactiveCredential, scopes);
Fournisseur de nom d’utilisateur/mot de passe
Le fournisseur de nom d’utilisateur/mot de passe permet à une application de connecter un utilisateur à l’aide de son nom d’utilisateur et de son mot de passe. Utilisez ce flux uniquement lorsque vous ne pouvez pas utiliser les autres flux OAuth. Pour plus d’informations, consultez Plateforme d'identités Microsoft et les informations d’identification du mot de passe du propriétaire de la ressource OAuth 2.0
var scopes = new[] { "User.Read" };
// Multi-tenant apps can use "common",
// single-tenant apps must use the tenant ID from the Azure portal
var tenantId = "common";
// Value from app registration
var clientId = "YOUR_CLIENT_ID";
// using Azure.Identity;
var options = new TokenCredentialOptions
{
AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
};
var userName = "adelev@contoso.com";
var password = "P@ssword1!";
// https://docs.microsoft.com/dotnet/api/azure.identity.usernamepasswordcredential
var userNamePasswordCredential = new UsernamePasswordCredential(
userName, password, tenantId, clientId, options);
var graphClient = new GraphServiceClient(userNamePasswordCredential, scopes);
Prochaines étapes
- Pour obtenir des exemples de code qui vous montrent comment utiliser le Plateforme d'identités Microsoft pour sécuriser différents types d’applications, consultez Plateforme d'identités Microsoft exemples de code (point de terminaison v2.0).
- Les fournisseurs d’authentification nécessitent un ID client. Vous souhaiterez inscrire votre application après avoir configuré votre fournisseur d’authentification.
- Faites-nous savoir si un flux OAuth requis n’est actuellement pas pris en charge en votant pour ou en ouvrant une demande de fonctionnalité Microsoft Graph.
Commentaires
Envoyer et afficher des commentaires pour