当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell:为 Exchange Online (Azure) 配置基于证书的身份验证

作者:精品下载站 日期:2024-12-14 06:35:29 浏览:14 分类:玩电脑

PowerShell:为 Exchange Online (Azure) 配置基于证书的身份验证


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.a-d.site" -CertStoreLocation "cert:\LocalMachine\My" -NotAfter $certvalid -KeySpec KeyExchange -FriendlyName "Azure Microsoft Entra ID PowerShell Auth cert"
$newcert|fl Subject,Thumbprint,NotBefore,NotAfter

复制证书指纹的值。

[玩转系统] PowerShell:为 Exchange Online (Azure) 配置基于证书的身份验证

然后将证书导出到CER和PFX文件:

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

现在您需要在 Azure Microsoft Entra 中创建一个应用程序:

  1. 登录 Azure 门户并转到 Microsoft Entra ID -> 应用注册 -> 新注册

  2. 指定应用程序名称(

    testCertAuthPowerShell

    ),选择仅此组织目录中的帐户(单一租户),然后点击注册

  3. 复制应用程序(客户端 ID)值;

    [玩转系统] PowerShell:为 Exchange Online (Azure) 配置基于证书的身份验证

  4. 然后为您的应用分配权限。转到API 权限 -> 添加权限。在此示例中,我们将授予管理 Exchange Online 配置的权限(我的组织使用的 API -> Office 365 Exchange Online)Azure -> 应用程序权限 -> Exchange.ManageAsApp -> 添加权限 -> 授予管理员同意);

    [玩转系统] PowerShell:为 Exchange Online (Azure) 配置基于证书的身份验证

  5. 然后转到证书和机密并从您的计算机上传自签名证书文件;

    [玩转系统] PowerShell:为 Exchange Online (Azure) 配置基于证书的身份验证

  6. 接下来,将 Exchange 管理员角色分配给您的应用转至Azure Active Directory -> 角色和管理员-> 选择Exchange 管理员角色 -> 添加分配 -> 从列表中选择您的应用程序 (testCertAuthPowerShell) 。

    [玩转系统] PowerShell:为 Exchange Online (Azure) 配置基于证书的身份验证

完成后,您可以尝试使用证书从计算机上的 PowerShell 脚本连接到 Exchange Online。请注意,在此示例中,计算机上已安装 Exchange Online PowerShell 模块 (EXO)。

您将需要以下变量的值(之前复制的变量):

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

现在您可以使用证书连接到 Exchange Online 租户:

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

[玩转系统] PowerShell:为 Exchange Online (Azure) 配置基于证书的身份验证

连接到 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

[玩转系统] PowerShell:为 Exchange Online (Azure) 配置基于证书的身份验证

要将 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:\PS\azure-auth.pfx" -CertStoreLocation Cert:\CurrentUser\My

然后,您可以在该计算机上的 PowerShell 脚本中使用基于 Azure 证书的身份验证。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯