如何在Powershell中存储MFA凭证

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Powershell中存储MFA凭证相关的知识,希望对你有一定的参考价值。

在基本身份验证下,您曾经能够将凭据存储在变量中

$cred = Get-Credential

现在我们正在使用Modern Auth,我们的多因素身份验证是Duo。

如何将MFA的凭据存储到变量中,以便将其插入脚本?

$mfacred = *whateverthecodeis*
Connect-MsolService -Credential $mfacred
Connect-AzureAD -Credential $mfacred

编辑我不想绕过MFA,我想提示它并以这样的方式存储凭据和令牌,使得脚本的其余部分可以使用凭证和令牌。

答案

至于我在脚本中启用MFA帐户的经验。您可以绕过MFA的唯一方法是使用没有'-Credential'参数的cmdlet。

MFA的主要用例是防止这样的事情:在受感染的帐户上运行的脚本。

更新:

因此,有一种方法可以通过编程方式获取令牌。这是通过使用安装Azure模块和/或其他O365模块附带的ADAL二进制文件来完成的。没有简单的方法来提示并将令牌存储在变量中。

您需要在脚本中加载DLL以开始缓存令牌:

Add-Type -Path 'C:Program FilesWindowsPowerShellModulesAzureAD2.0.x.xMicrosoft.IdentityModel.Clients.ActiveDirectory.dll'

您可以使用AcquireTokenAsync方法预先获取访问令牌。

$accesstoken = [Microsoft.IdentityModel.Clients.ActiveDirectory.TokenCache]::DefaultShared
$accesstoken.ReadItems() | select DisplayableId, Authority, ClientId, Resource

上面的ReadItem()方法将为您提供将令牌存储在变量中所需的所有信息。

$authContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" -ArgumentList #PLACE AUTHORITY URL HERE#
$client_id = "CLIENT_ID INFO"
$Credential = Get-Credential YOURUSERNAME@COMPANY.COM
$AzureADCred = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.UserPasswordCredential" -ArgumentList $Credential.UserName,$Credential.Password
$authResult = [Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContextIntegratedAuthExtensions]::AcquireTokenAsync($authContext,"https://RESOURCE-URL.COM",$client_Id,$AzureADCred)

获得令牌后,您可以使用该令牌连接到您的会话,可以是在线交换,Azure或Office。

$Authorization = "Bearer {0}" -f $authResult.Result.AccessToken
$Password = ConvertTo-SecureString -AsPlainText $Authorization -Force
$Ctoken = New-Object System.Management.Automation.PSCredential -ArgumentList "YourCompanyUserAccount@COMPANY.COM", $Password

有一点需要注意,这些仅适用于访问令牌,并未考虑刷新令牌。您甚至可能无法根据您使用的ADAL二进制文件返回刷新令牌。

要了解有关访问令牌的更多信息,您可以更多地了解它here

以上是关于如何在Powershell中存储MFA凭证的主要内容,如果未能解决你的问题,请参考以下文章

Powershell:使用临时凭证访问AWS s3存储桶

powershell 将用户从每用户MFA转换为基于条件访问的MFA

sh 如果您的AWS密钥对受MFA要求的限制,请按图所示运行此脚本以联系STS并将临时凭证放入环境中

开启MFA的账户使用Powershell免密(使用证书应用身份验证)方式连接Exchange Online

使用在 Azure 中使用 MFA 的帐户调用 Sqlcmd

AWS IAM 策略:要求用户自己预置 MFA