PowerShell:為 Exchange Online (Azure) 配置基於證書的身份驗證

Jacki

Microsoft Entra ID(例如 Azure AD)支持基於證書的身份驗證 (CBA)。這意味著你可以使用證書身份驗證自動運行 PowerShell 腳本,無需輸入密碼,也無需使用 Azure MFA。借助基於證書的身份驗證,您不再需要擔心在 PowerShell 腳本中安全存儲密碼或通過 SecretManagement 模塊使用第三方保管庫存儲。

以下介紹瞭如何使用證書從 PowerShell 腳本針對 Microsoft Entra ID (Azure AD) 和 Exchange Online 進行身份驗證。

您必須首先創建一個證書並將其安裝在您的計算機上。您可以從 CA 獲取證書或頒發自簽名證書。在此示例中,我們將使用 New-SelfSignedCertificate cmdlet 創建自簽名證書。

生成有效期為3年的自簽名證書:

$certvalid = (Get-Date).AddYears(3)
$newcert = New-SelfSignedCertificate -DnsName "pre_prod.woshub.com" -CertStoreLocation "cert:LocalMachineMy" -NotAfter $certvalid -KeySpec KeyExchange -FriendlyName "Azure Microsoft Entra ID PowerShell Auth cert"
$newcert|fl Subject,Thumbprint,NotBefore,NotAfter

複製證書指紋的值。

然後將證書導出到CER和PFX文件:

$newcert | Export-Certificate -FilePath "C:PSazure-auth.cer"
$newcert | Export-PfxCertificate -FilePath "C:PSazure-auth.pfx" -Password $(ConvertTo-SecureString -String "S3dPswrd@123" -AsPlainText -Force)

現在您需要在 Azure Microsoft Entra 中創建一個應用程序:

  1. 登錄 Azure 門戶並轉到 Microsoft Entra ID -> 應用程序註冊 ->新註冊;
  2. 指定應用程序名稱(testCertAuthPowerShell), 選擇僅此組織目錄中的帳戶(單一租戶),然後單擊登記;
  3. 複製申請(客戶 ID)價值;
  4. 然後為您的應用分配權限。前往API權限->添加權限。在此示例中,我們將授予管理 Exchange Online 配置的權限(我的組織使用的 API ->Office 365 在線交換)Azure -> 應用程序權限 ->Exchange.ManageAsApp -> 添加權限 -> 授予管理員同意);
  5. 然後去證書和秘密並從您的計算機上傳自簽名證書文件;
  6. 接下來,分配交換管理員您的應用程序的角色前往Azure Active Directory -> 角色和管理員-> 選擇交換管理員角色 -> 添加分配 -> 從列表中選擇您的應用程序 (testCertAuthPowerShell)。

完成後,您可以嘗試使用證書從計算機上的 PowerShell 腳本連接到 Exchange Online。請注意,在此示例中,計算機上已安裝 Exchange Online PowerShell 模塊 (EXO)。

推薦閱讀:在本地 Exchange 中配置混合現代身份驗證

您將需要以下變量的值(之前複製的變量):

$certThumbprint = "9CF05589A4B29BECEE6456F08A76EBC3DC2BC581"
$AzureAppID = "111111-2222-3333-4444-123456789"
$tenant="woshub.onmicrosoft.com"

現在您可以使用證書連接到 Exchange Online 租戶:

Connect-ExchangeOnline -AppId $AzureAppID -CertificateThumbprint $certThumbprint -Organization $tenant

連接到 Microsoft Entra ID 時,不會出現密碼提示,也不會出現新式身份驗證表單。

列出 Exchange 租戶中的郵箱:

Get-EXOMailbox

請記住在 PowerShell 腳本末尾添加用於斷開 Exchange Online 會話的命令:

Disconnect-ExchangeOnline -Confirm:$false

同樣,您也可以為其他 Microsoft 365 服務配置基於證書的身份驗證。這裡重要的是為您的 Azure 應用程序正確分配權限。

例如,如果您使用 Teams PowerShell 模塊,則可以運行以下命令來使用證書進行身份驗證:

Connect-MicrosoftTeams -CertificateThumbprint $certThumbprint -ApplicationId $AzureAppID -TenantId $tenant

要將 Azure AD PowerShell 模塊與證書結合使用來連接到 Microsoft Entra ID:

Connect-AzureAD -TenantId $tenant -ApplicationId $AzureAppID -CertificateThumbprint $certThumbprint

詳細了解如何在 Azure 中創建應用、分配權限以及在 PowerShell 中使用 Microsoft Graph API。

此外,您可以使用包含受密碼保護的私鑰的 PFX 文件將證書導入到另一台 Windows 主機。使用證書 MMC 管理單元或 PowerShell 導入證書:

$password = ConvertTo-SecureString -String "S3dPswrd@123" -Force -AsPlainText
Import-PfxCertificate -Password $password -FilePath "C:PSazure-auth.pfx" -CertStoreLocation Cert:CurrentUserMy

然後,您可以在該計算機上的 PowerShell 腳本中使用基於 Azure 證書的身份驗證。