Compartir vía


Configurar la autenticación OAuth entre organizaciones de Exchange y Exchange Online

El Asistente para configuración híbrida configura automáticamente la autenticación de OAuth entre las organizaciones locales de Exchange Server y Exchange Online. Si su organización de Exchange contiene servidores de Exchange 2010 o Exchange 2007, el Asistente para configuración híbrida no configura la autenticación de OAuth entre las organizaciones de Exchange locales y en línea. Estas implementaciones seguirán usando de forma predeterminada el proceso de la confianza de federación. Sin embargo, algunas características solo están totalmente disponibles en toda la organización mediante el nuevo protocolo de autenticación de Exchange OAuth.

Actualmente, el nuevo proceso de autenticación de OAuth de Exchange habilita las características de Exchange siguientes:

  • Administración de registros de mensajes (MRM)
  • Exhibición de documentos electrónicos local
  • Archivado local de Exchange

Se recomienda que todas las organizaciones mixtas de Exchange 2013 configuren la autenticación de OAuth de Exchange después de ejecutar el Asistente para configuración híbrida.

Importante

  • Si la organización local solo ejecuta servidores de Exchange 2013 con la actualización acumulativa 5 o posterior, Exchange 2016 o Exchange 2019, ejecute el Asistente para configuración híbrida en lugar de realizar los pasos de este tema.

  • Esta característica de Exchange Server 2013 no es totalmente compatible con Office 365 operado por 21Vianet en China y pueden aplicarse ciertas limitaciones en las características. Para obtener más información, vea Office 365 operado por 21Vianet.

¿Qué necesita saber antes de empezar?

Sugerencia

¿Problemas? Solicite ayuda en los foros de Exchange. Visite los foros en Exchange Server.

¿Cómo se configura la autenticación OAuth entre organizaciones de Exchange locales y de Exchange Online?

Glosario

Dominio inicial: el primer dominio aprovisionado en el inquilino. Por ejemplo, contoso.onmicrosoft.com. Se conoce como <dominio> inicial del inquilino en esta documentación.

Dominio de enrutamiento híbrido: el dominio de enrutamiento híbrido en entornos híbridos de Exchange, como contoso.mail.onmicrosoft.com, se usa para administrar el flujo de correo entre los servidores de Exchange locales y Exchange Online. Garantiza una comunicación y entrega de mensajes sin problemas en ambos entornos. Se conoce como <dominio> de enrutamiento híbrido en esta documentación.

Dirección de enrutamiento de correo electrónico en línea (MOERA) de Microsoft: la dirección construida a partir del prefijo del userPrincipalName usuario, más el sufijo de dominio inicial, que se agrega automáticamente a en Microsoft proxyAddress Entra ID. Por ejemplo, smtp:john.doe@contoso.onmicrosoft.com. No usamos en MOERA esta documentación, pero la enumeramos aquí en aras de la integridad.

Dominio SMTP principal: el dominio SMTP principal de Microsoft Exchange Server es el dominio principal que se usa para las direcciones de correo electrónico dentro de la organización. Se conoce como <dominio> SMTP principal en esta documentación.

Punto de conexión de detección automática: el punto de conexión de Detección automática es una dirección URL de servicio web que proporciona información de configuración de Exchange Server. Permite a las aplicaciones detectar y conectarse automáticamente a los servicios de Exchange. Si su empresa usa, por ejemplo, contoso.com como dominio SMTP principal, el punto de conexión de Detección automática suele ser https://autodiscover.contoso.com/autodiscover/autodiscover.svc o https://contoso.com/autodiscover/autodiscover.svc. Se conoce como <punto de conexión> de Detección automática local en esta documentación.

Servicios web de Exchange (EWS): Servicios web de Exchange (EWS) es una API multiplataforma que permite a las aplicaciones acceder a elementos de buzón, como mensajes de correo electrónico, reuniones y contactos. En esta documentación se hace referencia a <esta dirección URL> de servicios web de Exchange externa local.

Paso 1: Crear los objetos del servidor de autorización para la organización de Exchange Online

Ejecute el siguiente comando en el Shell de administración de Exchange (Exchange PowerShell) de la organización local de Exchange. Asegúrese de reemplazar los marcadores de posición por los valores antes de ejecutar el comando:

New-AuthServer -Name "WindowsAzureACS" -AuthMetadataUrl "https://accounts.accesscontrol.windows.net/<your tenant initial domain>/metadata/json/1"
New-AuthServer -Name "evoSTS" -Type AzureAD -AuthMetadataUrl "https://login.windows.net/<your tenant initial domain>/federationmetadata/2007-06/federationmetadata.xml"

En GCC High o DoD, debe usar los siguientes comandos en su lugar:

New-AuthServer -Name "WindowsAzureACS" -AuthMetadataUrl "https://login.microsoftonline.us/<your tenant initial domain>/metadata/json/1"
New-AuthServer -Name "evoSTS" -Type AzureAD -AuthMetadataUrl "https://login.microsoftonline.us/<your tenant initial domain>/federationmetadata/2007-06/federationmetadata.xml"

Paso 2: Habilitar la aplicación de socio para la organización de Exchange Online

Ejecute el siguiente comando en Exchange PowerShell en la organización local de Exchange:

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

Paso 3: Exportar el certificado de autorización local

En este paso, debe ejecutar un script de PowerShell en el servidor exchange directamente para exportar el certificado de autorización local, que se importa a su organización de Exchange Online en el paso siguiente.

  1. Guarde el siguiente texto en un archivo de script de PowerShell llamado, por ejemplo, ExportAuthCert.ps1.

    Nota:

    Si desea cargar el certificado configurado para convertirse en el nuevo certificado de autenticación en el futuro, reemplace por $thumbprint = (Get-AuthConfig).CurrentCertificateThumbprint$thumbprint = (Get-AuthConfig).NewCertificateThumbprint.

    $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 = (dir 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)
    
  2. En Exchange PowerShell en la organización de Exchange local, ejecute el script de PowerShell que creó en el paso anterior. Por ejemplo:

    .\ExportAuthCert.ps1
    

Paso 4: Carga del certificado de autorización local en Microsoft Entra Access Control Service (ACS)

A continuación, use PowerShell de Microsoft Graph para cargar el certificado de autorización local que exportó en el paso anterior a Microsoft Entra Access Control Services (ACS). Si no tiene instalado el módulo, abra una ventana de Windows PowerShell como administrador y ejecute el siguiente comando:

Install-Module -Name Microsoft.Graph.Applications

Complete los pasos siguientes una vez instalado Microsoft Graph PowerShell.

  1. Abra un área de trabajo de Windows PowerShell que tenga instalados los cmdlets de Microsoft Graph. Todos los comandos de este paso se ejecutarán con Windows PowerShell conectado a la consola de Microsoft Graph.

  2. Guarde el siguiente texto en un archivo de script de PowerShell llamado, por ejemplo, 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)
    $ServiceName = "00000002-0000-0ff1-ce00-000000000000"
    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. Ejecute el script de PowerShell que creó en el paso anterior. Por ejemplo:

    .\UploadAuthCert.ps1
    
  4. Después de iniciar el script, se abre un cuadro de diálogo de credenciales. Escriba las credenciales de la cuenta de administrador de inquilinos en la organización Microsoft Online Microsoft Entra. Después de ejecutar el script, deje abierta la sesión de Windows PowerShell conectada a Microsoft Graph. La usará para ejecutar un script de PowerShell en el paso siguiente.

Paso 5: Registro de todas las entidades de nombre de host para los puntos de conexión HTTP de Exchange internos y externos con el identificador de Microsoft Entra

Debe ejecutar el script en este paso para cada punto de conexión accesible públicamente en la organización local de Exchange, incluidas las direcciones URL internas y externas para la autenticación moderna híbrida. Por ejemplo, si Exchange está disponible externamente en https://mail.contoso.com/ews/exchange.asmx, use el nombre https://mail.contoso.comde entidad de seguridad de servicio . No existe un límite para registrar autoridades de nombre de host externas adicionales.

Para confirmar los puntos de conexión de Exchange en la organización local, ejecute los siguientes comandos en el Shell de administración de Exchange:

Get-MapiVirtualDirectory | Format-List server,*url*
Get-WebServicesVirtualDirectory | Format-List server,*url*
Get-OABVirtualDirectory | Format-List server,*url*

Nota:

El siguiente script requiere que Windows PowerShell conectado a Microsoft Graph esté conectado a su organización de Microsoft 365, como se explica en el paso 4 de la sección anterior.

  1. Guarde el siguiente texto en un archivo de script de PowerShell llamado, por ejemplo, RegisterEndpoints.ps1. Reemplace https://mail.contoso.com/ y https://autodiscover.contoso.com/ por la autoridad de nombre de host adecuada para la organización local de Exchange.

     $ServiceName = "00000002-0000-0ff1-ce00-000000000000";
     $x = Get-MgServicePrincipal -Filter "AppId eq '$ServiceName'"
     $x.ServicePrincipalNames += "https://mail.contoso.com/"
     $x.ServicePrincipalNames += "https://autodiscover.contoso.com/"
     Update-MgServicePrincipal -ServicePrincipalId $x.Id -ServicePrincipalNames $x.ServicePrincipalNames
    
  2. En Windows PowerShell conectado a Microsoft Graph, ejecute el script de Windows PowerShell que creó en el paso anterior. Por ejemplo:

    .\RegisterEndpoints.ps1
    
  3. Para comprobar que se agregaron todos los registros, ejecute el siguiente comando en Windows PowerShell conectado a Microsoft Graph y busque https://namespace entradas en los resultados.

    Get-MgServicePrincipal -Filter "AppId eq '$ServiceName'" | Select-Object -ExpandProperty ServicePrincipalNames | Sort-Object
    

Paso 6: Crear un IntraOrganizationConnector desde la organización local a Microsoft 365 u Office 365

En este paso, se configura un IntraOrganizationConnector que permite que Exchange Server local llegue a su organización de Exchange Online. Este conector permite la disponibilidad de características y la conectividad de servicio entre las organizaciones. Puede usar el cmdlet Get-IntraOrganizationConfiguration en los inquilinos locales y de Microsoft 365 u Office 365 para determinar los valores de punto de conexión necesarios para el cmdlet New-IntraOrganizationConnector .

Configuramos el dominio de enrutamiento híbrido como dirección de destino. El dominio de enrutamiento híbrido se crea automáticamente cuando se crea la organización de Microsoft 365 u Office 365. Por ejemplo, si el primer dominio que se agregó y validó en la organización de Microsoft 365 u Office 365 es contoso.com, la dirección de destino sería contoso.mail.onmicrosoft.com.

Con Exchange PowerShell, ejecute el siguiente cmdlet en la organización local:

$ServiceDomain = (Get-AcceptedDomain | Where-Object {$_.DomainName -like "*.mail.onmicrosoft.com"}).DomainName.Address
New-IntraOrganizationConnector -Name ExchangeHybridOnPremisesToOnline -DiscoveryEndpoint https://outlook.office365.com/autodiscover/autodiscover.svc -TargetAddressDomains $ServiceDomain

Paso 7: Crear un IntraOrganizationConnector desde su organización de Microsoft 365 u Office 365 a su organización de Exchange local

En este paso, configuramos un IntraOrganizationConnector que permite que Exchange Online llegue a su organización de Exchange local. Este conector permite la disponibilidad de características y la conectividad de servicio entre las organizaciones. Puede usar el cmdlet Get-IntraOrganizationConfiguration en los inquilinos locales y de Microsoft 365 u Office 365 para determinar los valores de punto de conexión necesarios para el cmdlet New-IntraOrganizationConnector .

Debe agregar todos los dominios SMTP que se usan en la organización local de Exchange (excepto su initial domain y hybrid routing domain) como TargetAddressDomains. Si tiene varios dominios SMTP, agréguelos como una lista separada por comas (por ejemplo, contoso.com,tailspintoys.com). También debe proporcionar el punto de conexión de Detección automática local como DiscoveryEndpoint.

Después de conectarse a Exchange Online PowerShell, reemplace <your on-premises AutoDiscover endpoint> y <your on-premises SMTP domain(s)> por los valores y ejecute el siguiente comando:

New-IntraOrganizationConnector -Name ExchangeHybridOnlineToOnPremises -DiscoveryEndpoint <your on-premises AutoDiscover endpoint> -TargetAddressDomains <your on-premises SMTP domain(s)>

Paso 8: Configurar un AvailabilityAddressSpace para los servidores anteriores a Exchange 2013 SP1

Advertencia

Exchange Server 2007, Exchange Server 2010 y Exchange Server 2013 han llegado al final del soporte técnico.

Al configurar una implementación híbrida en organizaciones de Exchange anteriores, necesita al menos un servidor de Exchange 2013 que ejecute Exchange 2013 SP1 o posterior. El servidor de Exchange 2013 requiere los roles de servidor Acceso de cliente y Buzón de correo. El servidor de Exchange 2013 coordina las comunicaciones entre la organización local de Exchange existente y la organización de Exchange Online. Se recomienda instalar varios servidores de Exchange 2013 en la organización local para aumentar la fiabilidad y la disponibilidad de las características de la implementación híbrida.

En las organizaciones de Exchange 2013 con Exchange 2010 o Exchange 2007, se recomienda que todos los servidores front-end accesibles desde Internet sean servidores de acceso de cliente de Exchange 2013 que ejecuten SP1 o posterior. Todas las solicitudes de Servicios web de Exchange (EWS) deben pasar por un servidor de acceso de cliente de Exchange 2013. Este requisito incluye solicitudes de Microsoft 365 a su organización de Exchange local y solicitudes de su organización de Exchange local a Microsoft 365. Es importante que tenga suficientes servidores de acceso de cliente de Exchange 2013 para controlar la carga de procesamiento y proporcionar redundancia de conexión. El número de servidores de acceso de cliente que necesita depende de la cantidad media de solicitudes de EWS y varía según la organización.

Antes de realizar el paso siguiente, compruebe que:

  • Los servidores híbridos de front-end son Exchange 2013 SP1 o posterior.
  • Solo dispone de una dirección URL de EWS externa para el o los servidores de Exchange 2013. La organización de Microsoft 365 u Office 365 debe conectarse a estos servidores para que las solicitudes basadas en la nube para que las características híbridas funcionen correctamente.
  • Los servidores disponen de los roles de servidor Buzón de correo y Acceso de clientes.
  • En todos los servidores de Buzón de correo y Acceso de clientes de Exchange 2010/2007 se ha aplicado el Service Pack (SP) o la actualización acumulativa (CU) más reciente.

Nota:

En el caso de las conexiones de características de implementaciones no híbridas, los servidores existentes de Buzón de correo de Exchange 2010/2007 pueden seguir usando servidores de Acceso de clientes de Exchange 2010/2007 para los servidores de front-end. Solo las solicitudes de características de implementación híbrida de la organización de Microsoft 365 u Office 365 necesitan conectarse a servidores de Exchange 2013.

Debe AvailabilityAddressSpace configurarse en servidores de acceso de cliente anteriores a Exchange 2013 que apunten al punto de conexión de Exchange Web Services de los servidores de acceso de cliente de Exchange 2013 SP1 locales. Este extremo es el que se ha descrito anteriormente en el paso 5, aunque también puede determinarse ejecutando el cmdlet siguiente en el servidor local de Acceso de clientes de Exchange 2013 SP1:

Get-WebServicesVirtualDirectory | Format-List AdminDisplayVersion,ExternalUrl

Nota:

Si se devuelve información de directorios virtuales de varios servidores, asegúrese de usar un extremo que se haya devuelto para un servidor de Acceso de clientes de Exchange 2013 SP1. Se mostrará 15.0 (Build 847.32) o superior para el AdminDisplayVersion parámetro .

Para configurar AvailabilityAddressSpace, use Exchange PowerShell y ejecute el siguiente cmdlet en la organización local:

Add-AvailabilityAddressSpace -AccessMethod InternalProxy -ProxyUrl <your on-premises external Exchange Web Services URL> -ForestName <your hybrid routing domain> -UseServiceAccount $true

¿Cómo saber si el proceso se ha completado correctamente?

Para confirmar si la configuración de OAuth es correcta se usa el cmdlet Test-OAuthConnectivity. Este cmdlet comprueba que los puntos de conexión locales de Exchange y Exchange Online pueden autenticar correctamente las solicitudes entre sí.

Para comprobar si la organización local de Exchange puede conectarse correctamente a Exchange Online, ejecute el comando siguiente en Exchange PowerShell en la organización local:

Test-OAuthConnectivity -Service EWS -TargetUri https://outlook.office365.com/ews/exchange.asmx -Mailbox <On-Premises Mailbox> -Verbose | Format-List

Para comprobar que la organización de Exchange Online puede conectarse correctamente a su organización de Exchange local, conéctese a Exchange Online PowerShell y ejecute el siguiente comando:

Test-OAuthConnectivity -Service EWS -TargetUri <external hostname authority of your Exchange On-Premises deployment>/metadata/json/1 -Mailbox <Exchange Online Mailbox> -Verbose | Format-List

Ejemplo:

Test-OAuthConnectivity -Service EWS -TargetUri `https://mail.contoso.com/metadata/json/1` -Mailbox ExchangeOnlineBox1 -Verbose | Format-List

Importante

Puede omitir el The SMTP address has no mailbox associated with it. error. Solo es importante que el ResultTask parámetro devuelva un valor de Success. Por ejemplo, la última sección de la salida de prueba debe leer:

ResultType: Success
Identity: Microsoft.Exchange.Security.OAuth.ValidationResultNodeId
IsValid: True
ObjectState: New