장치용 OWA의 푸시 알림 프록시 구성

적용 대상: Exchange Server 2013

Microsoft Exchange 2013의 온-프레미스 배포에 대해 디바이스용 OWA(iPhone용 OWA 및 iPad용 OWA)에 대한 푸시 알림을 사용하도록 설정하면 사용자가 iPhone용 OWA의 Outlook Web App 아이콘 및 iPad용 OWA에서 사용자의 받은 편지함에서 보이지 않는 메시지 수를 나타내는 업데이트를 받을 수 있습니다. 푸시 알림을 구성하고 사용하도록 설정하지 않으면 장치용 OWA 사용자가 앱을 시작해야 받은 편지함에 확인하지 않은 메시지가 있음을 알 수 있습니다. 새 메시지가 있으면 사용자 장치에서 장치용 OWA 배지가 업데이트되어 다음과 같이 표시됩니다.

디바이스용 OWA 배지입니다.

푸시 알림을 사용하도록 설정하는 방법

푸시 알림을 사용하려면 온-프레미스 Exchange 2013 서버가 Microsoft 365 또는 Office 365 푸시 알림 서비스에 연결하여 iPhone 및 iPad에 푸시 알림을 보내야 합니다. Exchange 2013 온-프레미스 서버는 Microsoft 365 또는 Office 365 알림 서비스를 통해 업데이트 알림을 라우팅하여 타사 푸시 알림 서비스에 개발자 계정을 등록할 필요성을 제거합니다. 다음 다이어그램에는 iPhone 및 iPad 사용자가 확인하지 않은 메시지에 대해 배지 업데이트를 받는 프로세스가 나와 있습니다.

푸시 알림에 대한 프로세스입니다.

푸시 알림을 사용하도록 설정하려면 관리자는 다음을 수행해야 합니다.

  1. Microsoft 365 또는 Office 365 organization 등록합니다.

  2. 모든 온-프레미스 서버를 Exchange Server 2013 CU3(누적 업데이트 3) 이상으로 업데이트합니다.

  3. 온-프레미스 Exchange 2013을 Microsoft 365 또는 Office 365 인증으로 설정합니다.

  4. 온-프레미스 Exchange Server 2013에서 Microsoft 365 또는 Office 365 푸시 알림을 사용하도록 설정하고 푸시 알림이 작동하는지 확인합니다.

Microsoft 365 또는 Office 365 organization 등록

Microsoft 365 및 Office 365 강력한 보안, 안정성 및 사용자 생산성을 위해 organization 요구 사항을 충족하도록 설계된 클라우드 기반 서비스입니다. 사용 가능한 다양한 구독 계획에는 Office 애플리케이션에 대한 액세스와 Lync 웹 회의 및 비즈니스용 호스팅 전자 메일 Exchange Online 같은 인터넷(클라우드 서비스)을 통해 사용하도록 설정된 기타 생산성 서비스에 대한 액세스가 포함됩니다.

많은 Microsoft 365 및 Office 365 계획에는 사용자가 여러 컴퓨터 및 디바이스에 설치할 수 있는 최신 Office 애플리케이션의 데스크톱 버전도 포함됩니다. 모든 Microsoft 365 및 Office 365 플랜은 구독 기준으로 매월 또는 매년 지불됩니다. 자세한 내용을 확인하거나 organization 대한 Office 365 등록하려면 비즈니스용 Microsoft 365란?을 참조하세요. Microsoft 365 및 Office 365 통해 제공되는 각 서비스에 대한 자세한 내용은 Microsoft 365 및 Office 365 서비스 설명을 참조하세요.

CU3 이상으로 업데이트

Exchange Server 2013용 CU3(누적 업데이트 3)은 RTM 이후 소프트웨어가 릴리스된 이후 2013년 Exchange Server 발견된 문제를 해결합니다. CU1 및 CU2의 모든 문제 및 수정 사항을 포함하고 CU2가 릴리스된 이후의 다른 수정 사항 및 업데이트를 포함합니다. 이 업데이트는 모든 Exchange Server 온-프레미스 고객에게 권장되지만 푸시 알림에는 필요합니다. CU3를 포함한 누적 업데이트에 대해 알아보려면 Exchange 2013에 대한 업데이트 참조하세요.

온-프레미스 Exchange 2013을 Microsoft 365 또는 Office 365 인증으로 설정

서버-서버 인증을 위한 표준화된 단일 방법은 Exchange Server 2013에서 사용하는 방법입니다. Exchange Server 2013(및 Lync Server 2013SharePoint 2013) 및 Office 2013은 서버 간 인증 및 권한 부여를 위한 OAuth(Open Authorization) 프로토콜을 지원합니다. 많은 주요 웹 사이트에서 사용하는 표준 권한 부여 프로토콜인 OAuth를 사용하면 사용자 자격 증명 및 암호가 한 컴퓨터에서 다른 컴퓨터로 전달되지 않습니다. 대신 인증 및 권한 부여는 OAuth 보안 토큰을 기반으로 합니다. 이러한 토큰은 특정 시간 동안 특정 리소스 집합에 대한 액세스 권한을 부여합니다.

OAuth 인증에는 일반적으로 단일 권한 부여 서버와 서로 통신해야 하는 두 영역의 세 가지 구성 요소가 포함됩니다. 보안 토큰은 인증 서버(보안 토큰 서버라고도 함)에서 통신해야 하는 두 영역으로 발급됩니다. 이러한 토큰은 한 영역에서 시작된 통신을 다른 영역에서 신뢰해야 하는지 확인합니다. 예를 들어 권한 부여 서버는 특정 Lync Server 2013 영역의 사용자가 지정된 Exchange 2013 영역에 액세스할 수 있는지 확인하는 토큰을 발급할 수 있으며 그 반대의 경우도 마찬가지입니다.

영역은 보안 컨테이너입니다.

그러나 온-프레미스 서버-서버 인증의 경우 타사 토큰 서버를 사용할 필요가 없습니다. Lync Server 2013 및 Exchange 2013 등의 각 서버 제품에는 서버 간 인증을 지원하는 SharePoint Server 등의 기타 Microsoft 서버와 인증용으로 사용할 수 있는 기본 제공 토큰 서버가 포함되어 있습니다. 예를 들어 Lync Server 2013은 자체적으로 보안 토큰을 발급하고 서명한 다음 해당 토큰을 사용하여 Exchange 2013과 통신할 수 있습니다. 이와 같은 경우 타사 토큰 서버가 필요하지 않습니다.

microsoft 365 또는 Office 365 Exchange Server 2013의 온-프레미스 구현에 대한 서버 간 인증을 구성하려면 다음 두 단계를 완료해야 합니다.

  • 1단계 - 온-프레미스 Exchange Server 기본 제공 토큰 발급자에게 인증서 할당: 먼저 온-프레미스 Exchange 관리자는 다음 Exchange Management Shell 스크립트를 사용하여 이전에 인증서를 만들지 않은 경우 인증서를 만들고 온-프레미스 Exchange Server 기본 제공 토큰 발급자에게 할당해야 합니다. 이 프로세스는 일회성 프로세스입니다. 인증서를 만든 후에는 해당 인증서를 다른 인증 시나리오에 다시 사용하고 대체하지 않아야 합니다. $tenantDomain 값을 도메인 이름으로 업데이트해야 합니다. 이렇게 하려면 다음 코드를 복사하여 붙여 넣습니다.

    참고: 코드를 복사하여 메모장과 같은 텍스트 편집기에 붙여넣고 .ps1 확장으로 저장하면 셸 스크립트를 더 쉽게 실행할 수 있습니다.

    # Make sure to update the following $tenantDomain with your Microsoft 365 or Office 365 organization domain.
    
    $tenantDomain = "Fabrikam.com"
    
    # Check whether the cert returned from Get-AuthConfig is valid and keysize must be >= 2048
    
    $c = Get-ExchangeCertificate | ?{$_.CertificateDomains -eq $env:USERDNSDOMAIN -and $_.Services -ge "SMTP" -and $_.PublicKeySize -ge 2048 -and $_.FriendlyName -match "OAuth"}
    If ($c.Count -eq 0)
    {
        Write-Host "Creating certificate for oAuth..."
        $ski = [System.Guid]::NewGuid().ToString("N")
        $friendlyName = "Exchange S2S OAuth"
        New-ExchangeCertificate -FriendlyName $friendlyName -DomainName $env:USERDNSDOMAIN -Services Federation -KeySize 2048 -PrivateKeyExportable $true -SubjectKeyIdentifier $ski
        $c = Get-ExchangeCertificate | ?{$_.friendlyname -eq $friendlyName}
    }
    ElseIf ($c.Count -gt 1)
    {
        $c = $c[0]
    }
    
    $a = $c | ?{$_.Thumbprint -eq (get-authconfig).CurrentCertificateThumbprint}
    If ($a.Count -eq 0)
    {
        Set-AuthConfig -CertificateThumbprint $c.Thumbprint
    }
    Write-Host "Configured Certificate Thumbprint is:"(get-authconfig).CurrentCertificateThumbprint
    
    # Export the certificate
    
    Write-Host "Exporting certificate..."
    if((test-path $env:SYSTEMDRIVE\OAuthConfig) -eq $false)
    {
        md $env:SYSTEMDRIVE\OAuthConfig
    }
    cd $env:SYSTEMDRIVE\OAuthConfig
    
    $oAuthCert = (dir Cert:\LocalMachine\My) | where {$_.FriendlyName -match "OAuth"}
    $certType = [System.Security.Cryptography.X509Certificates.X509ContentType]::Cert
    $certBytes = $oAuthCert.Export($certType)
    $CertFile = "$env:SYSTEMDRIVE\OAuthConfig\OAuthCert.cer"
    [System.IO.File]::WriteAllBytes($CertFile, $certBytes)
    
    # Set AuthServer
    $authServer = Get-AuthServer MicrosoftSts;
    if ($authServer.Length -eq 0)
    {
        Write-Host "Creating AuthServer Config..."
        New-AuthServer MicrosoftSts -AuthMetadataUrl https://accounts.accesscontrol.windows.net/metadata/json/1/?realm=$tenantDomain
    }
    elseif ($authServer.AuthMetadataUrl -ne "https://accounts.accesscontrol.windows.net/metadata/json/1/?realm=$tenantDomain")
    {
        Write-Warning "AuthServer config already exists but the AuthMetdataUrl doesn't match the appropriate value. Updating..."
        Set-AuthServer MicrosoftSts -AuthMetadataUrl https://accounts.accesscontrol.windows.net/metadata/json/1/?realm=$tenantDomain
    }
    else
    {
        Write-Host "AuthServer Config already exists."
    }
    Write-Host "Complete."
    

    결과는 다음 출력과 유사해야 합니다.

구성된 인증서 지문: 7595DBDEA83DACB5757441D44899BCDB9911253C
인증서 내보내기...
완료.

참고

계속하기 전에 Windows PowerShell cmdlet에 대한 Azure Active Directory 모듈이 필요합니다. Windows PowerShell cmdlet용 Azure Active Directory 모듈(이전에는 Windows PowerShell용 Microsoft Online Services 모듈)이 설치되지 않은 경우 Windows PowerShell 사용하여 Microsoft Entra ID 관리에서 설치할 수 있습니다.

  • 2단계 - Exchange 2013 온-프레미스와 통신하도록 Microsoft 365 또는 Office 365 구성: Exchange Server 2013과 통신하는 Microsoft 365 또는 Office 365 서버를 파트너 애플리케이션으로 구성합니다. 예를 들어 Exchange Server 2013 온-프레미스에서 Microsoft 365 또는 Office 365 통신해야 하는 경우 Exchange 온-프레미스를 파트너 애플리케이션으로 구성해야 합니다. 파트너 응용 프로그램은 Exchange 2013이 타사 보안 토큰 서버를 거치지 않고도 보안 토큰을 직접 교환할 수 있는 응용 프로그램입니다. 온-프레미스 Exchange 2013 관리자는 다음 Exchange Management Shell 스크립트를 사용하여 Exchange 2013이 파트너 애플리케이션으로 통신하는 Microsoft 365 또는 Office 365 organization 구성해야 합니다. 실행하는 동안 Microsoft 365 또는 Office 365 organization 도메인의 관리자 사용자 이름 및 암호를 입력하라는 메시지가 표시됩니다(예: administrator@fabrikam.com). 이전 스크립트에서 만들지 않은 경우 $CertFile 값을 인증서 위치로 업데이트해야 합니다. 이렇게 하려면 다음 코드를 복사하여 붙여 넣습니다.

    # Make sure to update the following $CertFile with the path to the cert if not using the previous script.
    
    $CertFile = "$env:SYSTEMDRIVE\OAuthConfig\OAuthCert.cer"
    
    If (Test-Path $CertFile)
    {
        $ServiceName = "00000002-0000-0ff1-ce00-000000000000";
    
        $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);
    
        Write-Host "Please enter the administrator username and password of the Microsoft 365 or Office 365 organization domain..."
    
        Write-Host "Adding a key to Service Principal..."
    
        $p = Get-MgServicePrincipal -Filter "AppId eq '$ServiceName'"
        $params = @{
          keyCredential = @{
              type = "AsymmetricX509Cert"
              usage = "Verify"
              key = $credValue
              endDateTime = $cer.GetExpirationDateString()
              startDateTime = $cer.GetEffectiveDateString()
          }
        }
    
        Add-MgServicePrincipalKey -ServicePrincipalId $p.Id -BodyParameter $params
    
    }
    Else
    {
        Write-Error "Cannot find certificate."
    }
    

    결과는 다음 출력과 유사해야 합니다.

    Microsoft 365 또는 Office 365 organization 도메인의 관리자 사용자 이름 및 암호를 입력하세요.
    서비스 주체에 키 추가...
    완료.

푸시 알림 프록시 사용

이전 단계에 따라 OAuth 인증이 성공적으로 설정되면 온-프레미스 관리자는 다음 스크립트를 사용하여 푸시 알림 프록시를 사용하도록 설정해야 합니다. $tenantDomain 값을 도메인 이름으로 업데이트해야 합니다. 이렇게 하려면 다음 코드를 복사하여 붙여 넣습니다.

$tenantDomain = "Fabrikam.com"
Enable-PushNotificationProxy -Organization:$tenantDomain

예상 결과는 다음 출력과 유사해야 합니다.

RunspaceId        : 4f2eb5cc-b696-482f-92bb-5b254cd19d60
DisplayName       : On Premises Proxy app
Enabled           : True
Organization      : fabrikam.com
Uri               : https://outlook.office365.com/PushNotifications
Identity          : OnPrem-Proxy
IsValid           : True
ExchangeVersion   : 0.20 (15.0.0.0)
Name              : OnPrem-Proxy
DistinguishedName : CN=OnPrem-Proxy,CN=Push Notifications Settings,CN=First Organization,CN=Microsoft
                    Exchange,CN=Services,CN=Configuration,DC=Domain,DC=extest,DC=microsoft,DC=com
Guid              : 8b567958-58a4-403c-a8f0-524d7f1e9279
ObjectCategory    : fabrikam.com/Configuration/Schema/ms-Exch-Push-Notifications-App
ObjectClass       : {top, msExchPushNotificationsApp}
WhenChanged       : 8/27/2013 7:23:47 PM
WhenCreated       : 8/14/2013 1:30:27 PM
WhenChangedUTC    : 8/28/2013 2:23:47 AM
WhenCreatedUTC    : 8/14/2013 8:30:27 PM
OrganizationId    :
OriginatingServer : server.fabrikam.com
ObjectState       : Unchanged

푸시 알림이 작동하는지 확인

이전 단계가 완료되면 푸시 알림은 다음 중 하나에서 테스트됩니다.

  • 사용자 사서함으로 테스트 전자 메일 보내기

    1. 알림에 구독할 모바일 장치에서 장치용 OWA에 계정을 설정합니다.

    2. 장치 홈 화면으로 돌아오면 장치용 OWA가 백그라운드에서 실행됩니다.

    3. PC 등의 다른 장치에서 모바일 장치에 설정한 계정의 받은 편지함으로 전자 메일 메시지를 보냅니다.

    4. 그러면 몇 분 이내에 앱 아이콘에 확인하지 않은 메시지 수가 표시됩니다.

  • 모니터링 사용. 푸시 알림을 테스트하거나 알림이 실패하는 이유를 조사하는 또 다른 방법은 조직의 사서함 서버에 대해 모니터링을 사용하도록 설정하는 것입니다. 온-프레미스 Exchange 2013 서버 관리자는 다음 스크립트를 사용하여 푸시 알림 프록시 모니터링을 호출해야 합니다. 이렇게 하려면 다음 코드를 복사하여 붙여 넣습니다.

    # Send a push notification to verify connectivity.
    
    $s = Get-ExchangeServer | ?{$_.ServerRole -match "Mailbox"}
    If ($s.Count -gt 1)
    {
        $s = $s[0]
    }
    If ($s.Count -ne 0)
    {
        # Restart the monitoring service to clear the cache from when push was previously disabled.
        Restart-Service MSExchangeHM
    
        # Give the monitoring service enough time to load.
        Start-Sleep -Seconds:120
    
        Invoke-MonitoringProbe PushNotifications.Proxy\PushNotificationsEnterpriseConnectivityProbe -Server:$s.Fqdn | fl ResultType, Error, Exception
    }
    Else
    {
        Write-Error "Cannot find a Mailbox server in the current site."
    }
    

    예상 결과는 다음 출력과 유사해야 합니다.

    ResultType: 성공
    오류:
    예외: