กำหนดค่าการตรวจสอบสิทธิ์ OAuth ใน Exchange 2016
ตราบใดที่ฉันจำได้ว่าตัวช่วยสร้างการกำหนดค่าไฮบริดเสร็จสิ้นเรียบร้อยแล้ว และสร้างข้อผิดพลาดเกี่ยวกับส่วน OAuth ของการกำหนดค่าไฮบริด
HCW8064 - HCW เสร็จสมบูรณ์แล้ว แต่ไม่สามารถดำเนินการส่วน OAuth ของการกำหนดค่าไฮบริดของคุณได้ หากคุณต้องการฟีเจอร์ที่ต้องอาศัย OAuth คุณสามารถลองเรียกใช้ HCW อีกครั้งหรือกำหนดค่า OAuth ด้วยตนเองโดยใช้ขั้นตอนด้วยตนเองเหล่านี้
ตัวเลือกเรียนรู้เพิ่มเติมเปลี่ยนเส้นทางไปยังหน้า Microsoft กำหนดค่าการรับรองความถูกต้อง OAuth ระหว่างองค์กร Exchange และ Exchange Online ฉันใช้บทความนั้นสำหรับคำสั่ง PowerShell ในบล็อกโพสต์นี้
OAuth ถูกใช้ข้ามสถานที่เพื่อเข้าสู่ระบบบริการอื่นๆ ในนามของผู้ใช้ ดังนั้น หากคุณเข้าสู่ระบบบริการบางอย่างของ Microsoft บริการนี้จะสามารถใช้ OAuth เพื่อเข้าถึงบริการใน Exchange ภายในองค์กรและในทางกลับกัน
ตัวอย่างของบริการข้ามสถานที่เหล่านี้คือ:
- การจัดการบันทึกข้อความ (MRM)
- แลกเปลี่ยน eDiscovery ในสถานที่
- แลกเปลี่ยนการเก็บถาวรในสถานที่
- ปฏิทินของทีม
HCW สามารถกำหนดค่า Azure Active Directory สำหรับการตรวจสอบสิทธิ์ OAuth โดยสามารถสร้าง IntraOrganizationConnectors ได้ แต่ไม่สามารถส่งออกและนำเข้าใบรับรอง (ลงนามด้วยตนเอง) บนเซิร์ฟเวอร์ Exchange และไม่สามารถ (หรือไม่) สร้างวัตถุเซิร์ฟเวอร์การอนุญาตใน Active ไดเรกทอรี ดังนั้น ถึงเวลาทดสอบตามคำแนะนำของบทความ Microsoft และจดบันทึกประสบการณ์ของฉัน
หมายเหตุ ใช้งานได้กับ Exchange 2013 และสูงกว่าเท่านั้น ฉันได้ดำเนินการนี้ในสภาพแวดล้อม Exchange 2016 และ Exchange 2019 แบบผสม
การกำหนดค่า OAuth ระหว่าง Office 365 และ Exchange Online เกี่ยวข้องกับหลายขั้นตอน
สร้างออบเจ็กต์เซิร์ฟเวอร์การอนุญาตใน Exchange ภายในองค์กร
หากต้องการสร้างออบเจ็กต์เซิร์ฟเวอร์การอนุญาตในสภาพแวดล้อมภายในองค์กรของคุณ ให้ป้อนคำสั่งต่อไปนี้ใน Exchange Management Shell
New-AuthServer -Name "WindowsAzureACS" -AuthMetadataUrl "https://accounts.accesscontrol.windows.net/contoso.com/metadata/json/1"
New-AuthServer -Name "evoSTS" -Type AzureAD -AuthMetadataUrl https://login.windows.net/contoso.com/federationmetadata/2007-06/federationmetadata.xmlโดเมนที่ได้รับการยืนยันของคุณ contoso.com (ในคำสั่ง) ควรมีลักษณะคล้ายกับ exchangelabs.nl และไม่ใช่ <ชื่อผู้เช่าของคุณ> ตามที่อธิบายไว้ในบทความ Microsoft
เปิดใช้งานแอปพลิเคชันพันธมิตรเพื่อใช้กับ Exchange Online
แอปพลิเคชันพันธมิตรถูกสร้างขึ้นในขั้นตอนก่อนหน้า (คำสั่งแรก) และควรเปิดใช้งาน ทำสิ่งนี้โดยใช้คำสั่งต่อไปนี้ใน Exchange Management Shell (ภายในองค์กร):
Get-PartnerApplication | ?{$_.ApplicationIdentifier -eq "00000002-0000-0ff1-ce00-000000000000" -and $_.Realm -eq ""} | Set-PartnerApplication -Enabled $trueส่งออกใบรับรองการอนุญาต Exchange
การรับรองความถูกต้องข้ามองค์กรใช้ใบรับรอง ดังนั้นใบรับรองภายในองค์กรจำเป็นต้องส่งออกไปยัง Azure Active Directory ในกรณีที่คุณสงสัยว่าใบรับรอง CN=Microsoft Exchange Server Auth Certificate มาจากไหน เมื่อเรียกใช้คำสั่ง Get-ExchangeCertificate ใน Exchange Management Shell จัดให้เลย
ใช้คำสั่ง PowerShell ต่อไปนี้และจัดเก็บไว้ในสคริปต์ PowerShell ชื่อ ExportAuthCert.ps1 หรืออย่างอื่นแล้วเรียกใช้ สิ่งนี้ควรส่งออกใบรับรอง OAuth ไปยังไฟล์ชื่อ OAuthCert.cer
$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) | ?{$_.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)
หมายเหตุ คำสั่ง Export-ExchangeCertificate ไม่ทำงานในสถานการณ์นี้เนื่องจากไม่สามารถส่งออกใบรับรองที่ลงนามด้วยตนเองได้
นำเข้าใบรับรองการอนุญาต Exchange ไปยัง Azure AD
ขั้นตอนต่อไปคือการนำเข้าใบรับรอง OAuthCert.cer ไปยัง Azure AD เชื่อมต่อกับบริการ Microsoft Online (Connect-MSOLService หากคุณไม่ได้ติดตั้งไว้ คุณสามารถใช้คำสั่ง Install-Module MSOnline) และรันคำสั่งต่อไปนี้เมื่อเชื่อมต่อ:
$Cred = Get-Credential
Connect-MSOLService -Credential $Cred
$CertFile = "$ENV:SYSTEMDRIVE\OAuthConfig\OAuthCert.cer"
$objFSO = New-Object -ComObject Scripting.FileSystemObject
$CertFile = $objFSO.GetAbsolutePathName($CertFile)
$CER = New-Object System.Security.Cryptography.X509Certificates.X509Certificate
$CER.Import($CertFile)
$binCert = $cer.GetRawCertData()
$CredValue = [System.Convert]::ToBase64String($binCert)
$ServiceName = "00000002-0000-0ff1-ce00-000000000000"
$P = Get-MsolServicePrincipal -ServicePrincipalName $ServiceName
New-MsolServicePrincipalCredential -AppPrincipalId $P.AppPrincipalId -Type asymmetric -Usage Verify -Value $credValueการดำเนินการนี้จะนำเข้าใบรับรองที่ลงนามด้วยตนเองจากเซิร์ฟเวอร์ Exchange ไปยัง Azure AD เพื่อให้สามารถใช้สำหรับการรับรองความถูกต้องร่วมกันได้
ฉันไม่ได้เรียกใช้คำสั่งที่กล่าวถึงข้างต้นบนเซิร์ฟเวอร์ Exchange ของฉัน แต่บนเซิร์ฟเวอร์ Azure AD Connect ของฉันเนื่องจากโมดูล MSOL ถูกโหลดบนเซิร์ฟเวอร์นั้น สำหรับการนำเข้าไฟล์ใบรับรอง ฉันต้องใช้คำสั่งต่อไปนี้เพื่อเข้าถึงไฟล์ใบรับรอง (แทนตัวแปร $ENV:System):
$CertFile = "\\AMS-EXCH01\C$\OAuthConfig\OAuthCert.cer"ลงทะเบียนจุดสิ้นสุดใน Azure Active Directory
ขั้นตอนสุดท้ายคือการลงทะเบียนตำแหน่งข้อมูลของสภาพแวดล้อม Exchange ภายในองค์กรของคุณลงใน Azure Active Directory คุณสามารถใช้คำสั่งต่อไปนี้เพื่อลงทะเบียนจุดสิ้นสุด:
$ServiceName = "00000002-0000-0ff1-ce00-000000000000";
$x = Get-MsolServicePrincipal -AppPrincipalId $ServiceName;
$x.ServicePrincipalnames.Add("https://webmail.exchangeserver.com/");
$x.ServicePrincipalnames.Add("https://autodiscover.exchangeserver.com/");
Set-MSOLServicePrincipal -AppPrincipalId $ServiceName -ServicePrincipalNames $x.ServicePrincipalNames;แทนที่จะใช้ webmail.exchangeserver.com และ Autodiscover.exchangeserver.com คุณต้องใช้ FQDN ภายในเครื่องของคุณเองของเซิร์ฟเวอร์ Exchange (แสดงด้านล่างในภาพหน้าจอการยืนยัน)
คุณสามารถใช้คำสั่งต่อไปนี้เพื่อตรวจสอบว่าได้รับการกำหนดค่าอย่างถูกต้องหรือไม่
Get-MsolServicePrincipal -AppPrincipalId 00000002-0000-0ff1-ce00-000000000000 | select -ExpandProperty ServicePrincipalNamesดังที่แสดงในภาพหน้าจอต่อไปนี้:
หมายเหตุ ในช่วงหลายปีที่ผ่านมา ฉันบริหาร HCW หลายครั้ง เพิ่มโดเมนแล้ว แต่ไม่ได้ลบ (โดยอัตโนมัติ) ใน Azure Active Directory
ตัวเชื่อมต่อภายในองค์กรและความพร้อมใช้งาน AddressSpace
ตัวช่วยสร้างการกำหนดค่าไฮบริดสลีสร้าง IntraOrganizationConnectors (ทั้งใน Exchange 2016 และ Exchange Online) และกำหนดค่า AvailabilityAddressSpace ไม่จำเป็นต้องสร้างสิ่งเหล่านี้ แต่คุณต้องตรวจสอบโดยใช้คำสั่ง Get-IntraOrganizationConnector และ Get-AvailabilityAddressSpace)
ตรวจสอบการกำหนดค่า OAuth
หากต้องการตรวจสอบการกำหนดค่า OAuth คุณสามารถใช้คำสั่ง Test-OAuthConnectivity คุณต้องทำเช่นนี้บนเซิร์ฟเวอร์ Exchange ในสถานที่และใน Exchange Online
บนเซิร์ฟเวอร์ Exchange Online ในสถานที่ ให้ใช้ Exchange Online Uri และ กล่องจดหมายภายในองค์กร:
Test-OAuthConnectivity -Service EWS -TargetUri https://outlook.office365.com/ews/exchange.asmx -Mailbox onprem-user@exchangeserver.com -Verbose | Format-Listใน Exchange Online ให้ใช้ Exchange on-premises Uri กับ กล่องจดหมายใน Exchange Online:
Test-OAuthConnectivity -Service EWS -TargetUri https://webmail.exchangeserver.com/metadata/json/1 -Mailbox Online-User@exchangeserver.com -Verbose | Format-Listผลลัพธ์เป็นรายการแบบขยาย แต่ท้ายที่สุดคุณควรเห็น ResultType: Success และ IsValid:True บนคอนโซลของคุณ:
ขณะนี้คุณได้กำหนดค่า OAuth ระหว่าง Exchange Online และ Exchange On-Premises แล้ว




