Condividi tramite


Configurare l'integrazione e OAuth tra i servizi di Microsoft Teams e Exchange Server

SI APPLICA A: 2015 2019 Subscription Edition

L'integrazione dei servizi di Microsoft Teams con i Exchange Server locali consente la funzionalità del calendario di Teams e l'integrazione Cloud Voicemail per le cassette postali ospitate in Exchange Server (locale). Per altre informazioni, vedere la documentazione relativa all'interazione tra Exchange e Microsoft Teams .

Questo argomento si applica all'integrazione con qualsiasi versione supportata di Exchange Server. Controlla la Exchange Server matrice di supporto per scoprire quali versioni di Exchange Server sono in uno stato supportato.

Cosa c'è da sapere prima di iniziare?

Configurare l'integrazione tra Exchange Server e Office 365

Passaggio 1: Configurare l'autenticazione OAuth tra Exchange Server e Exchange Online

Eseguire i passaggi descritti nella documentazione Configurare l'autenticazione OAuth tra Exchange e Exchange Online organizzazioni.

Passaggio 2: Creare un nuovo account utente di posta elettronica usato dal servizio Pianificazione calendario di Microsoft Teams

Questo passaggio deve essere eseguito sul server Exchange. Crea un utente di posta elettronica e assegna le autorizzazioni necessarie per il ruolo di gestione. Questo account verrà usato nel passaggio successivo per concedere all'applicazione di pianificazione di Microsoft Teams le autorizzazioni necessarie per la delega del calendario.

Specificare un dominio verificato per l'organizzazione di Exchange. Questo dominio deve essere lo stesso usato come dominio SMTP (Simple Mail Transfer Protocol) primario usato per gli account di Exchange locale. Questo dominio è definito <your Verified Domain> nella procedura seguente. Inoltre, <DomainControllerFQDN> deve essere il nome di dominio completo (FQDN) di un controller di dominio.

$user = New-MailUser -Name "TeamsScheduler" -ApplicationAccount -ExternalEmailAddress "TeamsScheduler-ApplicationAccount@<your Verified Domain>" -DomainController <DomainControllerFQDN>

Questo comando nasconde il nuovo utente di posta elettronica agli elenchi di indirizzi:

Set-MailUser -Identity $user.Identity -HiddenFromAddressListsEnabled $true -DomainController <DomainControllerFQDN>

Creare un nuovo ruolo in base al UserApplication ruolo:

New-ManagementRole -Name "TeamsSchedulerRole" -Parent "UserApplication" -DomainController <DomainControllerFQDN>

Rimuovere tutti i cmdlet dal nuovo ruolo tranne GetDelegate, poiché questo è l'unico comando richiesto dal servizio di pianificazione (delega):

Get-ManagementRoleEntry "TeamsSchedulerRole\*" -DomainController <DomainControllerFQDN> | Where-Object { $_.Name -ne "GetDelegate" } | Remove-ManagementRoleEntry -DomainController <DomainControllerFQDN>

Assegnare il TeamsSchedulerRole ruolo al nuovo account:

New-ManagementRoleAssignment -Role "TeamsSchedulerRole" -User $user.Identity -DomainController <DomainControllerFQDN>

Passaggio 3: Creare e abilitare l'integrazione legacy di Skype for Business Online

Importante

Microsoft deprecerà l'applicazione legacy di prima parte Skype for Business Online nel prossimo futuro. Attualmente esiste una dipendenza da questa applicazione, quindi deve rimanere configurata. Se non si configura questa applicazione partner, alcune funzionalità verranno interrotte, ad esempio la funzionalità dei messaggi di saluto della segreteria telefonica Fuori sede. Microsoft ti informerà quando è sicuro rimuovere l'applicazione.

Creare una nuova applicazione partner usando l'account creato in precedenza nel passaggio 2. Eseguire il comando seguente in Exchange Management Shell (EMS) all'interno dell'organizzazione di Exchange locale:

New-PartnerApplication -Name "SfBOnline" -ApplicationIdentifier "00000004-0000-0ff1-ce00-000000000000" -Enabled $true -LinkedAccount $user.Identity

Passaggio 4: Creare e abilitare un'applicazione partner per l'integrazione del servizio Pianificazione calendario di Teams

Per abilitare la delega del calendario per gli utenti nel Exchange Server (ambiente locale), è necessario configurare un'applicazione partner dedicata per il Teams Calendar Scheduler Service.

A questo scopo, creare una nuova applicazione partner per il Teams Calendar Scheduler Service eseguendo il comando seguente in Exchange Management Shell (EMS) nel server Exchange locale. Questa applicazione usa l'account creato in precedenza nel passaggio 2:

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

Passaggio 5: Creare e abilitare un'applicazione partner per Cloud Voicemail integrazione

Per abilitare Cloud Voicemail per gli utenti nell'ambiente locale, è necessario configurare un'applicazione partner dedicata per Cloud Voicemail.

A questo scopo, creare una nuova applicazione partner per Cloud Voicemail eseguendo il comando seguente in Exchange Management Shell (EMS) nel server Exchange locale:

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

Passaggio 6: Esportare il certificato di autenticazione Exchange Server

Eseguire uno script di PowerShell per esportare la chiave pubblica del certificato di autenticazione Exchange Server, che verrà importata nell'organizzazione di Microsoft Teams nel passaggio successivo.

Salvare il testo seguente in un file di script di PowerShell denominato, ad esempio . 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)

In Exchange Management Shell nell'organizzazione di Exchange locale eseguire lo script di PowerShell creato. Ad esempio: .\ExportAuthCert.ps1

Passaggio 7: Caricare il certificato di autenticazione Exchange Server

Usare quindi il modulo PowerShell di Microsoft Graph per caricare il certificato di autenticazione locale esportato nel passaggio precedente in servizi di Microsoft Entra Controllo di accesso (ACS). Se il modulo non è installato, aprire una finestra di Windows PowerShell come amministratore ed eseguire il comando seguente:

Install-Module -Name Microsoft.Graph.Applications
  1. Aprire un'area di lavoro di Windows PowerShell in cui sono installati i cmdlet di Microsoft Graph. Tutti i comandi di questo passaggio devono essere eseguiti usando il Windows PowerShell connesso alla console di Microsoft Graph.

  2. Salvare il testo seguente in un file di script di PowerShell denominato, ad esempio . 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", "00000004-0000-0ff1-ce00-000000000000")
    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. Eseguire lo script di PowerShell creato nel passaggio precedente. Ad esempio: .\UploadAuthCert.ps1

  4. Dopo aver avviato lo script, viene visualizzata una finestra di dialogo delle credenziali. Immettere le credenziali per l'account amministratore tenant nell'organizzazione di Microsoft Online Microsoft Entra. Dopo aver eseguito lo script, lasciare aperta la Windows PowerShell connessa alla sessione di Microsoft Graph. La sessione verrà usata per eseguire uno script di PowerShell nel passaggio successivo.

Passaggio 8: Verificare che il certificato sia stato caricato nelle entità servizio di prima parte

  1. Nella sessione di PowerShell connessa a Microsoft Graph, eseguire le operazioni seguenti

    (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 *
    (Get-MgServicePrincipal -Filter "AppId eq '00000004-0000-0ff1-ce00-000000000000'" -Select "keyCredentials").KeyCredentials | Format-List *
    
  2. Verificare che sia elencata una chiave con i dati di inizio e di fine corrispondenti alle date di inizio e di fine del certificato OAuth di Exchange

Verifica il tuo successo

Verifica che la configurazione sia corretta verificando che alcune delle funzionalità funzionino correttamente.

  1. Confermare Cloud Voicemail funzionalità in una configurazione ibrida di Exchange

    • Effettuare una chiamata di Teams a un utente che ha un messaggio di saluto della segreteria telefonica attivo Out of Office .
    • Lasciare un messaggio della segreteria telefonica.
    • Ascoltare il saluto durante la chiamata:
    • Dopo la chiamata, verificare se il messaggio della segreteria telefonica è stato recapitato correttamente alla cassetta postale dell'utente.
  2. Verificare che la cronologia delle conversazioni per i client mobili sia visibile nella cartella Di Outlook Conversation History .

  3. Verificare che i messaggi di chat archiviati vengano depositati nella cassetta postale locale dell'utente nella Purges cartella utilizzando EWSEditor.

    In alternativa, controllare il traffico durante l'handshake OAuth. Il traffico OAuth è distinto e non assomiglia all'autenticazione di base. Un indicatore di chiave è la presenza di identificatori di emittente nello scambio di token, ad esempio:

    • 7557eb47-c689-4224-abcf-aef9bd7573df@<realm>
    • db7de2b5-2149-435e-8043-e080dd50afae@<realm>
    • 00000004-0000-0ff1-ce00-000000000000@<realm> (nello scenario legacy di utilizzo di app di prima parte)

    Questi identificatori possono essere visualizzati anche con una barra iniziale, ad esempio: /7557eb47-c689-4224-abcf-aef9bd7573df@<realm>. Questi token non includono un nome utente o una password, che evidenzia un principio di base di OAuth: l'autenticazione senza scambio di credenziali.

    Se vuoi essere certo di usare correttamente OAuth, assicurati di sapere cosa aspettarsi e di sapere quale dovrebbe essere l'aspetto del traffico. Ecco cosa aspettarsi.

    Ecco un esempio di configurazione, ma è possibile utilizzare qualsiasi strumento di traccia di rete che si desidera intraprendere questo processo.

Come disabilitare l'integrazione legacy di Skype for Business Online

Cautela

Non eliminare ancora la versione legacy Skype for Business'applicazione partner online. La rimozione di questa applicazione di terze parti interromperà la funzionalità di diverse funzionalità, ad esempio i messaggi di saluto della segreteria telefonica Fuori sede, che dipendono ancora dall'applicazione legacy di prima parte. Microsoft ti informerà una volta che sarà possibile rimuovere l'applicazione in modo sicuro.

L'applicazione legacy first-party Skype for Business Online, che include l'ID 00000004-0000-0ff1-ce00-000000000000applicazione, verrà deprecata nel prossimo futuro. Nell'ambito di questo sforzo, sono state introdotte applicazioni dedicate di prima parte per il servizio Calendar Scheduler di Teams e Cloud Voicemail.

Seguire i passaggi di questa sezione per eliminare qualsiasi applicazione partner che usa un'applicazione legacy di prima parte Skype for Business Online :

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

Configurare l'autenticazione OAuth tra Exchange e le organizzazioni Exchange Online