Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Powershell中存储MFA凭据_Powershell_Variables_Credentials_Multi Factor Authentication - Fatal编程技术网

如何在Powershell中存储MFA凭据

如何在Powershell中存储MFA凭据,powershell,variables,credentials,multi-factor-authentication,Powershell,Variables,Credentials,Multi Factor Authentication,在基本身份验证下,您过去可以在变量中存储凭据 $cred = Get-Credential 现在我们使用的是现代身份验证,我们的多因素身份验证是Duo 如何将MFA的凭据存储到变量中,以便将其插入脚本 范例 $mfacred = *whateverthecodeis* Connect-MsolService -Credential $mfacred Connect-AzureAD -Credential $mfacred 编辑 我不想绕过MFA,我想提示输入它,并以这样的方式存储凭据和令牌,

在基本身份验证下,您过去可以在变量中存储凭据

$cred = Get-Credential
现在我们使用的是现代身份验证,我们的多因素身份验证是Duo

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

范例

$mfacred = *whateverthecodeis*
Connect-MsolService -Credential $mfacred
Connect-AzureAD -Credential $mfacred
编辑
我不想绕过MFA,我想提示输入它,并以这样的方式存储凭据和令牌,以便脚本的其余部分可以使用凭据和令牌

根据我在脚本中使用MFA启用帐户的经验。绕过MFA的唯一方法是使用不带“-Credential”参数的cmdlet

MFA的主要使用情形是防止出现以下情况:在受损帐户上运行脚本

更新:

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

$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)
您需要在脚本中加载DLL以开始缓存令牌:

Add-Type -Path 'C:\Program Files\WindowsPowerShell\Modules\AzureAD\2.0.x.x\Microsoft.IdentityModel.Clients.ActiveDirectory.dll'
您可以使用该方法预先获取访问令牌

上面的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)
拥有令牌后,您可以使用该令牌连接到会话,可以是exchange online、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二进制文件返回刷新令牌


要了解有关访问令牌的更多信息,您可以对其进行更多研究

您可以尝试支持现代身份验证和无人参与脚本的EXO V2预览模块

您可以使用证书或现有服务主体和客户机机密,而不是存储密码


我不想绕过MFA,我想提示输入它,并以这样的方式存储凭据和令牌,以便脚本的其余部分可以使用凭据和令牌。@AaronMartin希望这个帮助我将不得不使用它。我们使用Duo,所以希望这是适用的。它应该根据逻辑工作。实际上,您只能获得通过Microsoft发布的令牌。在后端使用Duo(MFA提示符和机密软令牌)进行的任何操作都是在发出访问令牌之前完成的。具体取决于您要访问的服务。我知道O365有应用程序密码,但不确定其他人是否有。