如何为 Exchange Online 编写 MultiFactor Powershell 脚本

How do I write MultiFactor Powershell scripts for Exchange Online

我有一个 MS 提供的 powershell 脚本,我已经编辑了。一如既往,MS 提供了一个使用旧代码的脚本。由于我们启用了 MFA,我不能再使用 Get-Credential 进行身份验证,因为我们使用现代身份验证而不是基本身份验证。如何编辑代码以支持 MFA?我们不使用 Auzer MFA,我们使用 Duo。

旧代码:

$adminCredential = Get-Credential

    Write-Output "Connecting to Exchange Online Remote Powershell Service"
    $ExoSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $adminCredential -Authentication Basic -AllowRedirection
    if ($null -ne $ExoSession) { 
        Import-PSSession $ExoSession -AllowClobber
    } else {
        Write-Output "  No EXO service set up for this account"
    }

    Write-Output "Connecting to EOP Powershell Service"
    $EopSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.compliance.protection.outlook.com/powershell-liveid/ -Credential $adminCredential -Authentication Basic -AllowRedirection
    if ($null -ne $EopSession) { 
        Import-PSSession $EopSession -AllowClobber
    } else {
        Write-Output "  No EOP service set up for this account"
    }

新命令应该是 Connect-IPPSSession 而不是 New-PSSession 但我必须以某种方式更改 Get-Credential 以传递凭据和 MFA 我只是不知道如何执行此操作。

如果要使用OAuth认证,需要有Access Token

一旦应用程序拥有访问令牌,它可以使用令牌通过API访问用户的帐户,限制访问范围,直到令牌过期或被撤销。

这里是一个 API 请求的例子,使用了 curl。请注意,它包括访问令牌:

curl -X POST -H "Authorization: Bearer ACCESS_TOKEN""https://api.digitalocean.com/v2/$OBJECT"

您可以参考下面的 OAuth 身份验证 link:

Using PowerShell to Authenticate Against OAuth

完全公开,我和我支持的任何客户都不使用 Duo。

话虽如此,MS 没有关于使用 DUO 作为 O365 源的 PowerShell 和 MFA 的文档。

根据女士...

Connect to Office 365 services with multifactor authentication (MFA) and PowerShell

Connect to Exchange Online PowerShell using multi-factor authentication

您不能使用 Exchange Online 远程 PowerShell 模块在同一会话中连接到 Exchange Online PowerShell 和安全与合规中心 PowerShell (window)。您需要使用 Exchange Online 远程 PowerShell 模块的单独会话。

如果您想使用多重身份验证 (MFA) 连接到 Exchange Online PowerShell,您不能使用连接到 Exchange Online PowerShell 中的说明

https://docs.microsoft.com/en-us/powershell/exchange/exchange-online/connect-to-exchange-online-powershell/connect-to-exchange-online-powershell?view=exchange-ps

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection

使用远程 PowerShell 连接到 Exchange Online。

MFA 要求您安装 Exchange Online 远程 PowerShell 模块,并使用 Connect-EXOPSSession cmdlet 进行连接。

Connect-EXOPSSession -UserPrincipalName <UPN> [-ConnectionUri <ConnectionUri> -AzureADAuthorizationEndPointUri <AzureADUri>]

Multi-Factor Authentication (MFA) Setup and End-User Experience with Office 365 and PowerShell

另请参阅,如果您还没有的话。

How do I change the username format sent to Duo?

阅读答案后,我意识到我的问题结构不够详细,无法得到我需要的答案。我将保留问题并将其中一个答案标记为答案,因为它确实回答了我提出的问题,而不是我希望了解的内容。

Connect-ExchangeOnline支持2FA登录。你可以 运行 它没有任何参数。