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

Se aplica a: Exchange Server 2013

El Asistente para configuración híbrida configura automáticamente la autenticación de OAuth entre Exchange 2013 y Exchange Online organizaciones. Si la organización de Exchange 2013 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. No obstante, ciertas características de Exchange 2013 solo se encuentran totalmente disponibles en una organización si se usa el nuevo protocolo de autenticación de OAuth de Exchange.

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 su organización local solo ejecuta servidores de Exchange 2013 con la actualización acumulativa 5 o posterior instalada, ejecute al Asistente para implementación híbrida en lugar de realizar los pasos que se describen en 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, consulte Office 365 operados 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?

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

En este procedimiento hay que especificar un dominio comprobado para la organización de Exchange Online. Debe ser el mismo dominio que el dominio SMTP principal usado para las cuentas de correo electrónico basadas en la nube. Este dominio se conoce como <dominio> comprobado en el procedimiento siguiente.

Ejecute el siguiente comando en el Shell de administración de Exchange (Exchange PowerShell) de la organización local de Exchange:

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

Nota:

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

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

Nota:

El dominio de coexistencia de inquilinos tiene el formato contoso.mail.onmicrosoft.com

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 de Exchange local.

Get-PartnerApplication |  ?{$_.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 luego se importa a la 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.

    $thumbprint = (Get-AuthConfig).CurrentCertificateThumbprint
    if((test-path $env:SYSTEMDRIVE\OAuthConfig) -eq $false)
    {
       md $env:SYSTEMDRIVE\OAuthConfig
    }
    cd $env:SYSTEMDRIVE\OAuthConfig
    $oAuthCert = (dir Cert:\LocalMachine\My) | where {$_.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 el 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"
     $p = Get-MgServicePrincipal -Filter "AppId eq '$ServiceName'"
     $params = @{
     	keyCredentials = @{
     		type = "AsymmetricX509Cert"
     		usage = "Verify"
     		key = $credValue
     	}
     }
     Update-MgServicePrincipal -ServicePrincipalId $p.Id -BodyParameter $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 de Microsoft Online Microsoft Entra. Después de ejecutar el script, deje abierto el Windows PowerShell conectado a la sesión de Microsoft Graph. La usará para ejecutar un script de PowerShell en el paso siguiente.

Paso 5: Registrar todas las autoridades de nombre de host para los puntos de conexión HTTP de Exchange internos y externos con Microsoft Entra ID

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 | FL server,*url*
Get-WebServicesVirtualDirectory | FL server,*url*
Get-OABVirtualDirectory | FL server,*url*

Nota:

El siguiente script requiere que el 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. En este ejemplo se usa un contoso.com. 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'"
     $ServicePrincipalUpdate =@(
        "https://mail.contoso.com/","https://autodiscover.contoso.com/"
     )
     Update-MgServicePrincipal -ServicePrincipalId $x.Id -ServicePrincipalNames $ServicePrincipalUpdate
    
  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 -ExpandProperty ServicePrincipalNames
    

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

Se debe definir una dirección de destino para los buzones que se hospedan en Exchange Online. Esta dirección de destino se crea automáticamente cuando se crea su organización de Microsoft 365 o Office 365. Por ejemplo, si el dominio de su organización hospedado en la organización de Microsoft 365 o Office 365 es "contoso.com", la dirección del servicio de destino sería "contoso.mail.onmicrosoft.com".

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

$ServiceDomain = Get-AcceptedDomain | where {$_.DomainName -like "*.mail.onmicrosoft.com"} | select -ExpandProperty Name
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 o Office 365 a su organización de Exchange local

Se debe definir una dirección de destino para los buzones que se hospedan en la organización local. Si la dirección SMTP principal de la organización está en "contoso.com", las direcciones de destino estarían en "contoso.com".

También hay que definir un extremo externo de detección automática para la organización local. Si su empresa es "contoso.com", el punto de conexión de detección automática suele ser uno de los siguientes valores:

  • https://autodiscover.<your primary SMTP domain>/autodiscover/autodiscover.svc
  • https://<your primary SMTP domain>/autodiscover/autodiscover.svc>

Nota:

Puede usar el cmdlet Get-IntraOrganizationConfiguration en los inquilinos locales y de Microsoft 365 o Office 365 para determinar los valores de punto de conexión necesarios para el cmdlet New-IntraOrganizationConnector.

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

New-IntraOrganizationConnector -name ExchangeHybridOnlineToOnPremises -DiscoveryEndpoint <your on-premises Autodiscover endpoint> -TargetAddressDomains <your on-premises SMTP domain>

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

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 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 o 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 Microsoft 365 o Office 365 organización necesitan conectarse a servidores de Exchange 2013.

Un AvailabilityAddressSpace debe 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 (compilación 847.32) o posterior para el parámetro AdminDisplayVersion .

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

Add-AvailabilityAddressSpace -AccessMethod InternalProxy -ProxyUrl <your on-premises External Web Services URL> -ForestName <your Microsoft 365 or Office 365 service target address> -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 Exchange Online puede conectarse correctamente a la 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

Por lo tanto, como ejemplo,

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

Importante

Puede omitir el error "La dirección SMTP no tiene ningún buzón asociado". Solo es importante que el parámetro ResultTask 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

Sugerencia

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