在基本身份验证中,您过去可以将凭据存储在变量中。
$cred = Get-Credential
现在我们使用的是现代八月,我们的多因素认证是双重的。
如何将MFA的凭据存储到变量中,以便将它们插入脚本?
示例
$mfacred = *whateverthecodeis*
Connect-MsolService -Credential $mfacred
Connect-AzureAD -Credential $mfacred
编辑我不想绕过MFA,我想提示它,并以这样一种方式存储凭证和令牌,以便脚本的其他部分可以使用凭证和令牌。
发布于 2018-10-10 15:03:26
就我在脚本中使用MFA启用帐户的经验而言。您能够绕过MFA的唯一方法是使用没有“-凭据”参数的cmdlet。 MFA的主要用例是防止这样的情况:运行在受损帐户上的脚本。
更新:
因此,有一种方法可以以编程方式获取令牌。这是通过使用安装Azure模块和/或其他O365模块时附带的ADAL二进制文件来完成的。提示令牌并将其存储在变量中没有简单的方法。
您需要在脚本中加载DLL才能开始缓存令牌:
Add-Type -Path 'C:\Program Files\WindowsPowerShell\Modules\AzureAD\2.0.x.x\Microsoft.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二进制文件返回刷新令牌。
要了解有关访问令牌的更多信息,可以研究更多关于it的这里。
https://stackoverflow.com/questions/52741897
复制相似问题