Partager via


Configurer l’intégration et OAuth entre les services Microsoft Teams et Exchange Server

S’APPLIQUE À : Édition d’abonnement 2015 2019

L’intégration des services Microsoft Teams à la Exchange Server locale permet l’intégration de Messagerie vocale infonuagique et de fonctionnalités de calendrier Teams pour les boîtes aux lettres hébergées sur Exchange Server (localement). Pour plus d’informations, consultez la documentation sur l’interaction entre Exchange et Microsoft Teams .

Cette rubrique s’applique à l’intégration à n’importe quelle version prise en charge de Exchange Server. Consultez la matrice de prise en charge des Exchange Server pour savoir quelles versions de Exchange Server sont prises en charge.

Que devez-vous savoir avant de commencer ?

Configurer l’intégration entre Exchange Server et O365

Étape 1 : Configurer l’authentification OAuth entre Exchange Server et Exchange Online

Effectuez les étapes décrites dans la documentation Configurer l’authentification OAuth entre Exchange Server et Exchange Online.

Étape 2 : Créer un compte d’utilisateur de messagerie utilisé par les applications partenaires

Cette étape doit être effectuée sur le serveur Exchange. Il crée un utilisateur de messagerie et attribue les autorisations de rôle de gestion nécessaires. Ce compte sera utilisé à l’étape suivante pour accorder à l’application partenaire les autorisations requises.

Spécifiez un domaine vérifié pour votre organization Exchange. Ce domaine doit être le même domaine que le domaine SMTP (Simple Mail Transfer Protocol) principal utilisé pour les comptes Exchange locaux. Ce domaine est appelé <your Verified Domain> dans la procédure suivante.

$user = New-MailUser -Name "TeamsIntegration-ApplicationAccount" -ExternalEmailAddress "TeamsIntegration-ApplicationAccount@<your Verified Domain>"
Set-MailUser -Identity $user.UserPrincipalName -HiddenFromAddressListsEnabled $true

Créez un rôle de gestion basé sur le UserApplication rôle :

New-ManagementRole -Name "TeamsIntegrationRole" -Parent "UserApplication"

Supprimez toutes les entrées de rôle du nouveau rôle de gestion, à l’exception GetDelegatede , GetUserOofSettingsFindItem, DeleteItem, UpdateItem, GetAttachment et ConvertId:

$roleEntries = @("GetDelegate", "FindItem", "GetUserOofSettings", "DeleteItem", "UpdateItem", "GetAttachment", "ConvertId")
Get-ManagementRoleEntry "TeamsIntegrationRole\*" | Where-Object { $roleEntries -notcontains $_.Name } | ForEach-Object { Remove-ManagementRoleEntry -Identity "TeamsIntegrationRole\$($_.Name)" -Confirm:$false }

Attribuez le TeamsIntegrationRole rôle au compte nouvellement créé :

New-ManagementRoleAssignment -Role "TeamsIntegrationRole" -User $user.UserPrincipalName

Étape 3 : Créer et activer une application partenaire pour l’intégration du service Planificateur de calendrier Teams

Pour activer la délégation de calendrier pour les utilisateurs de votre Exchange Server (environnement local), vous devez configurer une application partenaire dédiée pour le Teams Calendar Scheduler Service.

Pour ce faire, créez une application partenaire pour le Teams Calendar Scheduler Service en exécutant la commande suivante dans Exchange Management Shell (EMS) sur votre serveur Exchange local :

New-PartnerApplication -Name "TeamsScheduler" -ApplicationIdentifier "7557eb47-c689-4224-abcf-aef9bd7573df" -Enabled $true -LinkedAccount $user.UserPrincipalName

Étape 4 : Créer et activer une application partenaire pour l’intégration Messagerie vocale infonuagique

Pour activer Messagerie vocale infonuagique pour les utilisateurs de votre environnement local, vous devez configurer une application partenaire dédiée pour Cloud Voicemail.

Pour ce faire, créez une application partenaire pour Cloud Voicemail en exécutant la commande suivante dans Exchange Management Shell (EMS) sur votre serveur Exchange local :

New-PartnerApplication -Name "CloudVoicemail" -ApplicationIdentifier "db7de2b5-2149-435e-8043-e080dd50afae" -Enabled $true -LinkedAccount $user.UserPrincipalName

Étape 5 : Exporter le certificat d’authentification Exchange Server

Exécutez un script PowerShell pour exporter la clé publique du certificat d’authentification Exchange Server, que vous allez importer dans votre organization Microsoft Teams à l’étape suivante.

Enregistrez le texte suivant dans un fichier de script PowerShell nommé, par exemple . ExportAuthCert.ps1

$thumbprint = (Get-AuthConfig).CurrentCertificateThumbprint
if((Test-Path $env:SYSTEMDRIVE\OAuthConfig) -eq $false)
{
   New-Item -Path $env:SYSTEMDRIVE\OAuthConfig -Type Directory
}
Set-Location -Path $env:SYSTEMDRIVE\OAuthConfig
$oAuthCert = Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object {$_.Thumbprint -match $thumbprint}
$certType = [System.Security.Cryptography.X509Certificates.X509ContentType]::Cert
$certBytes = $oAuthCert.Export($certType)
$certFile = "$env:SYSTEMDRIVE\OAuthConfig\OAuthCert.cer"
[System.IO.File]::WriteAllBytes($certFile, $certBytes)

Dans Exchange Management Shell dans votre organization Exchange local, exécutez le script PowerShell que vous avez créé. Par exemple : .\ExportAuthCert.ps1

Étape 6 : Charger le certificat d’authentification Exchange Server

Ensuite, utilisez le module Microsoft Graph PowerShell pour charger le certificat d’authentification local que vous avez exporté à l’étape précédente vers Microsoft Entra Access Control Services (ACS). Si le module n’est pas installé, ouvrez une fenêtre Windows PowerShell en tant qu’administrateur et exécutez la commande suivante :

Install-Module -Name Microsoft.Graph.Applications
  1. Ouvrez un espace de travail Windows PowerShell sur lequel les applets de commande Microsoft Graph sont installées. Toutes les commandes de cette étape doivent s’exécuter à l’aide du Windows PowerShell connecté à la console Microsoft Graph.

  2. Enregistrez le texte suivant dans un fichier de script PowerShell nommé, par exemple . UploadAuthCert.ps1

    Connect-MgGraph -Scopes Application.ReadWrite.All
    
    $certFile = "$env:SYSTEMDRIVE\OAuthConfig\OAuthCert.cer"
    $objFSO = New-Object -ComObject Scripting.FileSystemObject
    $certFile = $objFSO.GetAbsolutePathName($certFile)
    $cer = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new($certFile)
    $binCert = $cer.GetRawCertData()
    $credValue = [System.Convert]::ToBase64String($binCert)
    $serviceNames = @("db7de2b5-2149-435e-8043-e080dd50afae", "7557eb47-c689-4224-abcf-aef9bd7573df")
    foreach ($serviceName in $serviceNames) {
       Write-Host "[+] Trying to query the service principals for service: $serviceName" -ForegroundColor Cyan
       $p = Get-MgServicePrincipal -Filter "AppId eq '$serviceName'"
       Write-Host "[+] Trying to query the keyCredentials for service: $serviceName" -ForegroundColor Cyan
       $servicePrincipalKeyInformation = Get-MgServicePrincipal -Filter "AppId eq '$serviceName'" -Select "keyCredentials"
    
       $keyCredentialsLength = $servicePrincipalKeyInformation.KeyCredentials.Length
       if ($keyCredentialsLength -gt 0) {
          Write-Host "[+] $keyCredentialsLength existing key(s) found - we keep them if they have not expired" -ForegroundColor Cyan
    
          $newCertAlreadyExists = $false
          $servicePrincipalObj = New-Object -TypeName Microsoft.Graph.PowerShell.Models.MicrosoftGraphServicePrincipal
          $keyCredentialsArray = @()
    
          foreach ($cred in $servicePrincipalKeyInformation.KeyCredentials) {
             $thumbprint = [System.Convert]::ToBase64String($cred.CustomKeyIdentifier)
    
             Write-Host "[+] Processing existing key: $($cred.DisplayName) thumbprint: $thumbprint" -ForegroundColor Cyan
    
             if ($newCertAlreadyExists -ne $true) {
                $newCertAlreadyExists = ($cer.Thumbprint).Equals($thumbprint, [System.StringComparison]::OrdinalIgnoreCase)
             }
    
             if ($cred.EndDateTime -lt (Get-Date)) {
                Write-Host "[+] This key has expired on $($cred.EndDateTime) and will not be retained" -ForegroundColor Yellow
                continue
             }
    
             $keyCredential = New-Object -TypeName Microsoft.Graph.PowerShell.Models.MicrosoftGraphKeyCredential
             $keyCredential.Type = "AsymmetricX509Cert"
             $keyCredential.Usage = "Verify"
             $keyCredential.Key = $cred.Key
    
             $keyCredentialsArray += $keyCredential
          }
    
          if ($newCertAlreadyExists -eq $false) {
             Write-Host "[+] New key: $($cer.Subject) thumbprint: $($cer.Thumbprint) will be added" -ForegroundColor Cyan
             $keyCredential = New-Object -TypeName Microsoft.Graph.PowerShell.Models.MicrosoftGraphKeyCredential
             $keyCredential.Type = "AsymmetricX509Cert"
             $keyCredential.Usage = "Verify"
             $keyCredential.Key = [System.Text.Encoding]::ASCII.GetBytes($credValue)
    
             $keyCredentialsArray += $keyCredential
    
             $servicePrincipalObj.KeyCredentials = $keyCredentialsArray
             Update-MgServicePrincipal -ServicePrincipalId $p.Id -BodyParameter $servicePrincipalObj
          } else {
             Write-Host "[+] New key: $($cer.Subject) thumbprint: $($cer.Thumbprint) already exists and will not be uploaded again" -ForegroundColor Yellow
          }
       } else {
          $params = @{
             type = "AsymmetricX509Cert"
             usage = "Verify"
             key = [System.Text.Encoding]::ASCII.GetBytes($credValue)
          }
    
          Write-Host "[+] This is the first key which will be added to this service principal" -ForegroundColor Cyan
          Update-MgServicePrincipal -ServicePrincipalId $p.Id -KeyCredentials $params
       }
    }
    
  3. Exécutez le script PowerShell que vous avez créé lors de l’étape précédente. Par exemple : .\UploadAuthCert.ps1

  4. Une fois que vous avez lancé le script, une boîte de dialogue d’informations d’identification s’affiche. Entrez les informations d’identification du compte d’administrateur client dans votre Microsoft Entra organization Microsoft Online. Après avoir exécuté le script, laissez le Windows PowerShell connecté à la session Microsoft Graph ouvert. Vous utiliserez la session pour exécuter un script PowerShell à l’étape suivante.

Étape 7 : Vérifier que le certificat a été chargé sur les principaux de service internes

  1. Dans la session PowerShell connectée à Microsoft Graph, exécutez la commande suivante

    (Get-MgServicePrincipal -Filter "AppId eq '7557eb47-c689-4224-abcf-aef9bd7573df'" -Select "keyCredentials").KeyCredentials | Format-List *
    (Get-MgServicePrincipal -Filter "AppId eq 'db7de2b5-2149-435e-8043-e080dd50afae'" -Select "keyCredentials").KeyCredentials | Format-List *
    
  2. Vérifiez que vous voyez une clé répertoriée avec des données de date de début et de fin qui correspondent aux dates de début et de fin de votre certificat OAuth Exchange

Étape 8 : Vérifier votre réussite

Vérifiez que la configuration est correcte en vérifiant que certaines fonctionnalités fonctionnent correctement.

  1. Confirmer Messagerie vocale infonuagique fonctionnalité dans une configuration Exchange hybride

    • Activer Automatic replies dans votre boîte aux lettres hébergée sur Exchange Server (local) à l’aide d’Outlook sur le web (OWA) ou d’Outlook Desktop
    • Ouvrez Teams, accédez àManage out-of-office voicemailSettings>Calls>et case activée When Outlook automatic replies are on
    • Entrez un message d’accueil personnalisé à la Your custom greeting zone
    • Passer un appel Teams à cet utilisateur
    • Laisser un message vocal
    • Écoutez le message d’accueil pendant l’appel :
      • Si l’application partenaire CloudVoicemail fonctionne, vous entendrez le message d’accueil personnalisé d’absence du bureau
      • Si cela ne fonctionne pas, le message d’accueil normal sera lu à la place
    • Après l’appel, case activée si votre message vocal a été correctement remis à la boîte aux lettres de l’utilisateur
  2. Vérifiez que l’historique des conversations pour les clients mobiles est visible dans le dossier Outlook Conversation History .

  3. Vérifiez que les messages de conversation archivés sont déposés dans la boîte aux lettres locale de l’utilisateur dans le dossier à l’aide Purgesd’EWSEditor.

    Vous pouvez également inspecter le trafic pendant l’établissement d’une liaison OAuth. Le trafic OAuth est distinct et ne ressemble pas à l’authentification de base. Un indicateur clé est la présence d’identificateurs d’émetteur dans l’échange de jetons, par exemple :

    • 7557eb47-c689-4224-abcf-aef9bd7573df@<realm>
    • db7de2b5-2149-435e-8043-e080dd50afae@<realm>

    Ces identificateurs peuvent également apparaître avec une barre oblique de début, par exemple : /7557eb47-c689-4224-abcf-aef9bd7573df@<realm>. Ces jetons n’incluent pas de nom d’utilisateur ou de mot de passe, ce qui met en évidence un principe de base d’OAuth : l’authentification sans échange d’informations d’identification.

    Si vous souhaitez être sûr d’utiliser OAuth avec succès, assurez-vous de savoir à quoi vous attendre et de savoir à quoi doit ressembler le trafic. Voici à quoi s’attendre.

    Voici un exemple de configuration, mais vous pouvez utiliser n’importe quel outil de suivi réseau de votre choix pour entreprendre ce processus.

Étape 9 : Désactiver ou supprimer l’application Skype Entreprise Online héritée

L’application interne Skype for Business Online héritée, qui a l’ID d’application 00000004-0000-0ff1-ce00-000000000000, sera progressivement désactivée à partir du 13 octobre 2025. Dans le cadre de cet effort, l’application interne dédiée au service planificateur de calendrier Teams et Messagerie vocale infonuagique ont été introduites.

Suivez les étapes de cette section pour désactiver toute application partenaire qui utilise une application interne Skype for Business Online héritée :

Get-PartnerApplication | Where-Object { $_.ApplicationIdentifier -eq "00000004-0000-0ff1-ce00-000000000000" -and $_.Enabled -eq $true } | Set-PartnerApplication -Enabled $false

Si vous souhaitez supprimer l’application partenaire héritée Skype for Business Online , vous pouvez exécuter la commande suivante :

Get-PartnerApplication | Where-Object { $_.ApplicationIdentifier -eq "00000004-0000-0ff1-ce00-000000000000" -and $_.Enabled -eq $true } | Remove-PartnerApplication

Configurer l’authentification OAuth entre Exchange et Exchange Online organisations