Apprendre à utiliser l’authentification OAuth avec vos applications EWS Managed API.
Vous pouvez utiliser le service d’authentification OAuth fourni par Microsoft Entra pour permettre à vos applications API managées EWS d’accéder à Exchange Online dans Office 365. Pour utiliser OAuth avec votre application, vous devrez :
L’authentification OAuth pour EWS est disponible uniquement dans Exchange dans le cadre d’Office 365. Les applications EWS qui utilisent OAuth doivent être inscrites auprès de Microsoft Entra.
Pour utiliser le code dans cet article, vous devrez avoir accès aux éléments suivants :
Deux types d’autorisations OAuth peuvent être utilisés pour accéder aux API EWS dans Exchange Online. Avant de commencer le tutoriel, vous devrez choisir le type de permission spécifique à utiliser.
Des autorisations déléguées sont utilisées par les applications qui ont un utilisateur connecté. Pour ces applications, l’utilisateur ou un administrateur consent aux autorisations demandées par l’application, et l’application peut agir en tant qu’utilisateur connecté lors des appels API.
Des autorisations d’application sont utilisées par les applications qui s’exécutent sans utilisateur connecté ; par exemple, les applications qui s’exécutent en tant que démons ou services d’arrière-plan et qui peuvent accéder à plusieurs boîtes aux lettres.
Inscription de votre application
Pour utiliser OAuth, une application doit avoir un ID d’application émis par Microsoft Entra. Dans ce tutoriel, il est supposé que l’application est une application console. Vous devez donc inscrire votre application en tant que client public avec Microsoft Entra. Vous pouvez inscrire une application dans le centre d'administration Microsoft Entra ou à l’aide de Microsoft Graph.
Sélectionnez Identité dans le volet de navigation de gauche, puis sélectionnez inscriptions d'applications sous Applications.
Sélectionnez Nouvelle inscription. Sur la page Inscrire une application, définissez les valeurs comme suit.
Définissez Nompour un nom convivial de votre application.
Définissez types de comptes pris en charge pour le choix adapté à votre scénario.
Pour Rediriger URI, remplacez la liste déroulante par client public (mobile & bureau) et définissez la valeur sur https://login.microsoftonline.com/common/oauth2/nativeclient.
Choisissez Inscrire. Sur la page Application console Graph, copiez les valeurs de l’ID de l’application (client) et de l’ID du répertoire (client) ; vous en aurez besoin plus loin dans cet exercice.
Notes
Les développeurs peuvent se connecter avec un compte professionnel ou scolaire pour inscrire une application dans un répertoire d’ID Entra, ou se connecter avec un compte personnel (MSA) qui est un invité dans un répertoire Entra ID.
Si les développeurs n’ont pas de répertoire d’ID Entra, ils peuvent en obtenir un gratuitement auprès du programme développeur M365.
Configurer pour l’authentification déléguée
Si votre application utilise l’authentification déléguée, aucune configuration ultérieure n’est requise. La Platforme d’identites Microsoft pour développeurs permet aux applications de demander des autorisations de façon dynamique, de sorte que vous n’avez pas à configurer préalablement les autorisations sur l’inscription de l’application. Toutefois, dans certains scénarios (par exemples, au nom du flux), la configuration préalable des autorisations est requise. Suivez les étapes ci-dessous pour préconfigurer les autorisations EWS.
Sélectionnez Autorisations de l’API dans le volet de navigation gauche sous Gérer.
Recherchez la propriété requiredResourceAccess dans le manifeste, puis ajoutez les éléments suivants à l’intérieur des crochets ([]) :
Sélectionnez Autorisations de l’API dans le volet de navigation gauche sous Gérer. Vérifiez que l’autorisation full_access_as_app est répertoriée.
Sélectionnez Accorder l’autorisation d’administrateur pour l'entreprise puis acceptez la boîte de dialogue de consentement.
Sélectionnez Certificats et clés secrètes dans le volet de navigation gauche sous Gérer.
Sélectionnez Secret nouveau client, entrez une courte description, puis sélectionnez Ajouter.
Copiez la Valeur du nouveau secret client ajouté et enregistrez-le. vous en aurez besoin plus tard.
Ajouter un code pour obtenir un jeton d’authentification
Les extraits de code suivants montrent comment utiliser la bibliothèque d’authentification Microsoft pour obtenir des jetons d’authentification pour les autorisations déléguées et les autorisations d’application. Ces extraits de code partent du principe que les informations requises pour effectuer la demande d’authentification sont stockées dans le fichier App. config de l’application. Ces exemples ne comprennent pas la vérification des erreurs, voir les exemples de code pour le code complet.
Obtenir un jeton avec l’authentification déléguée
cs
// Using Microsoft.Identity.Client 4.22.0// Configure the MSAL client to get tokensvar pcaOptions = new PublicClientApplicationOptions
{
ClientId = ConfigurationManager.AppSettings["appId"],
TenantId = ConfigurationManager.AppSettings["tenantId"]
};
var pca = PublicClientApplicationBuilder
.CreateWithApplicationOptions(pcaOptions).Build();
// The permission scope required for EWS accessvar ewsScopes = newstring[] { "https://outlook.office365.com/EWS.AccessAsUser.All" };
// Make the interactive token requestvar authResult = await pca.AcquireTokenInteractive(ewsScopes).ExecuteAsync();
Obtenir un jeton avec l’authentification de l’application uniquement
cs
// Using Microsoft.Identity.Client 4.22.0var cca = ConfidentialClientApplicationBuilder
.Create(ConfigurationManager.AppSettings["appId"])
.WithClientSecret(ConfigurationManager.AppSettings["clientSecret"])
.WithTenantId(ConfigurationManager.AppSettings["tenantId"])
.Build();
// The permission scope required for EWS accessvar ewsScopes = newstring[] { "https://outlook.office365.com/.default" };
//Make the token requestvar authResult = await cca.AcquireTokenForClient(ewsScopes).ExecuteAsync();
Ajouter un jeton d’authentification aux demandes EWS
Une fois que vous avez reçu l’objet RésultatAuthentification vous pouvez utiliser la propriété duJetond’Accès pour obtenir le jeton émis par le service d’émission de jeton.
cs
// Configure the ExchangeService with the access tokenvar ewsClient = new ExchangeService();
ewsClient.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
ewsClient.Credentials = new OAuthCredentials(authResult.AccessToken);
Pour utiliser les autorisations d’application, vous devez également emprunter explicitement une boîte aux lettres à laquelle vous voulez accéder.
cs
//Impersonate the mailbox you'd like to access.
ewsClient.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "test@demotenant.onmicrosoft.com");
Exemples de code
Authentification déléguée
Ce qui suit est l’échantillon de code complet qui démontre qu’une demande EWS authentifiée OAuth utilise les autorisations d’application.
cs
using Microsoft.Exchange.WebServices.Data;
using Microsoft.Identity.Client;
using System;
using System.Configuration;
namespaceEwsOAuth
{
classProgram
{
staticasync System.Threading.Tasks.Task Main(string[] args)
{
// Using Microsoft.Identity.Client 4.22.0// Configure the MSAL client to get tokensvar pcaOptions = new PublicClientApplicationOptions
{
ClientId = ConfigurationManager.AppSettings["appId"],
TenantId = ConfigurationManager.AppSettings["tenantId"]
};
var pca = PublicClientApplicationBuilder
.CreateWithApplicationOptions(pcaOptions).Build();
// The permission scope required for EWS accessvar ewsScopes = newstring[] { "https://outlook.office365.com/EWS.AccessAsUser.All" };
try
{
// Make the interactive token requestvar authResult = await pca.AcquireTokenInteractive(ewsScopes).ExecuteAsync();
// Configure the ExchangeService with the access tokenvar ewsClient = new ExchangeService();
ewsClient.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
ewsClient.Credentials = new OAuthCredentials(authResult.AccessToken);
// Make an EWS callvar folders = ewsClient.FindFolders(WellKnownFolderName.MsgFolderRoot, new FolderView(10));
foreach(var folder in folders)
{
Console.WriteLine($"Folder: {folder.DisplayName}");
}
}
catch (MsalException ex)
{
Console.WriteLine($"Error acquiring access token: {ex}");
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex}");
}
if (System.Diagnostics.Debugger.IsAttached)
{
Console.WriteLine("Hit any key to exit...");
Console.ReadKey();
}
}
}
}
Authentification de l'application uniquement
Ce qui suit est l’échantillon de code complet qui démontre qu’une demande EWS authentifiée OAuth utilise les autorisations d’application.
Notes
Lorsque vous utilisez l’emprunt d’identité, vous devez toujours utiliser l’en-tête de demande X-AnchorMailbox, qui doit être défini sur le SMTP de la boîte aux lettres empruntée.
cs
using Microsoft.Exchange.WebServices.Data;
using Microsoft.Identity.Client;
using System;
using System.Configuration;
namespaceEwsOAuth
{
classProgram
{
staticasync System.Threading.Tasks.Task Main(string[] args)
{
// Using Microsoft.Identity.Client 4.22.0var cca = ConfidentialClientApplicationBuilder
.Create(ConfigurationManager.AppSettings["appId"])
.WithClientSecret(ConfigurationManager.AppSettings["clientSecret"])
.WithTenantId(ConfigurationManager.AppSettings["tenantId"])
.Build();
var ewsScopes = newstring[] { "https://outlook.office365.com/.default" };
try
{
var authResult = await cca.AcquireTokenForClient(ewsScopes)
.ExecuteAsync();
// Configure the ExchangeService with the access tokenvar ewsClient = new ExchangeService();
ewsClient.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
ewsClient.Credentials = new OAuthCredentials(authResult.AccessToken);
ewsClient.ImpersonatedUserId =
new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "meganb@contoso.onmicrosoft.com");
//Include x-anchormailbox header
ewsClient.HttpHeaders.Add("X-AnchorMailbox", "meganb@contoso.onmicrosoft.com");
// Make an EWS callvar folders = ewsClient.FindFolders(WellKnownFolderName.MsgFolderRoot, new FolderView(10));
foreach(var folder in folders)
{
Console.WriteLine($"Folder: {folder.DisplayName}");
}
}
catch (MsalException ex)
{
Console.WriteLine($"Error acquiring access token: {ex}");
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex}");
}
if (System.Diagnostics.Debugger.IsAttached)
{
Console.WriteLine("Hit any key to exit...");
Console.ReadKey();
}
}
}
}
Le code échantillon dans les deux cas nécessite un fichier App.config avec les entrées suivantes :
XML
<?xml version="1.0" encoding="utf-8" ?><configuration><startup><supportedRuntimeversion="v4.0"sku=".NETFramework,Version=v4.7.2" /></startup><appSettings><!-- The application ID from your app registration --><addkey="appId"value="YOUR_APP_ID_HERE" /><!-- The tenant ID copied from your app registration --><addkey="tenantId"value="YOUR_TENANT_ID_HERE"/><!-- The application's client secret from your app registration. Needed for application permission access --><addkey="clientSecret"value="YOUR_CLIENT_SECRET_HERE"/></appSettings></configuration>
Lorsque vous créez des applications professionnelles, vous intégrez généralement des API sécurisées. Découvrez les deux méthodes courantes de sécurisation des API : clé API et OAuth2, et comment les intégrer lors de la création d’un plug-in d’API pour les agents déclaratifs qui s’exécutent dans Microsoft 365 Copilot.
Expliquez les fonctionnalités de Microsoft Entra ID pour moderniser des solutions d’identité, implémenter des solutions hybrides et une gouvernance des identités.