Как сохранить учетные данные MFA в Powershell - PullRequest
0 голосов
/ 10 октября 2018

При базовой аутентификации вы раньше могли хранить учетные данные в переменной

$cred = Get-Credential

Теперь мы используем Modern Auth, а наша многофакторная аутентификация - Duo.

Как хранитьмои учетные данные для MFA в переменную, чтобы я мог подключить их к сценарию?

Пример

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

Редактировать Я не хочу обходить MFA, я хочузапросите его и сохраните учетные данные и токен таким образом, чтобы остальная часть сценария могла использовать учетные данные и токен.

1 Ответ

0 голосов
/ 10 октября 2018

Что касается моего опыта работы с учетными записями с поддержкой MFA в сценариях.Единственный способ обойти MFA - это использовать командлеты без параметра -Credential.

Основным вариантом использования MFA является защита от таких вещей, как сценарии, работающие на скомпрометированной учетной записи.

ОБНОВЛЕНИЕ:

Итак, есть способ взломать ваш путь к программному получению токена.Это делается с помощью двоичных файлов ADAL, которые поставляются с установкой модулей Azure и / или других модулей O365.Нет простого способа запросить и сохранить токен в переменной.

Вам потребуется загрузить 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 вы используете.

Чтобы узнать больше о токенах доступа, вы можете узнать больше об этом здесь

...