Автоматизируйте скрипт Powershell для подключения к MSOnline, пока применяется MFA - PullRequest
0 голосов
/ 25 февраля 2020

Заранее спасибо.

Вкратце, я работаю в команде, управляющей несколькими Microsoft CSP (партнерскими центрами), время от времени кто-то просит нас запустить сценарий, который выполняет c действия или захватывает конкретную c информацию от всех 30 CSP, которыми мы управляем, и от всех клиентов под ними

Ранее мы использовали для хранения всех имен пользователей, паролей, идентификаторов TenantID, идентификаторов WebApp в файле CSV и создавали сценарий, который запускается на каждом raw, чтобы автоматически получать необходимую информацию для каждого CSP без запроса учетных данных, используя следующую команду:

$credential = (New-Object –TypeName System.Management.Automation.PSCredential –argumentlist $AdminName ,(ConvertTo-SecureString $AdminPassword –AsPlainText –Force))

И затем вызвать его во всех модулях, как показано ниже:

#MSonline
Connect-Msolservice –Credential $Credential

#ExchangeOnline
$session = New-PSSession –ConfigurationName Microsoft.Exchange –ConnectionUri https://outlook.office365.com/powershell-liveid?DelegatedOrg=$Customerdomain  –Credential $credential –Authentication Basic –AllowRedirection
Import-PSSession $Session

#Partner Center
Add-PCAuthentication -cspappID $NAtive_clientid -cspDomain $domain -credential $credentials
Connect-MsolService -Credential $credentials 

Затем MFA был применен ко всем CSP, хотя и безопасным, но это представляло проблему с автоматизацией наших скриптов. Каждый раз, когда нас просят запустить скрипт, нам нужно было бы войти как минимум 1 раз вручную, чтобы ввести свои учетные данные MFA, чтобы иметь возможность запускать скрипт на каждом CSP по отдельности.

Модули, к которым мы обычно подключаемся, являются : PartnerCenter MSOnline CsOnline AzureRM AzureAD

Microsoft предоставила шаги, чтобы обойти это с помощью безопасных модулей API: https://docs.microsoft.com/en-us/powershell/partnercenter/secure-app-model?view=partnercenterps-1.5

Я создал новые приложения с новыми секретами и перезвонил, сумел получить refre sh токен и успешно интегрировал его в модуль PartnerCenter следующим образом:

Connect-PartnerCenter -ApplicationId $NAtive_clientid -RefreshToken $refresh_token

Теперь я пытаюсь сделать то же самое для других модулей, к которым я обращаюсь, согласно В приведенном выше документе я мог бы сделать то же самое для MS Online и для Azure AD, просто получив 3 других токена (Graph Token, Azure AD токен и Azure токен)

$credential = Get-Credential
$refreshToken = 'Your-Refresh-Token-Value'

$azureToken = New-PartnerAccessToken -RefreshToken $refreshToken -Resource https://management.azure.com/ -Credential $credential -TenantId '<Your Tenant Id>'
$graphToken =  New-PartnerAccessToken -RefreshToken $refreshToken -Resource https://graph.microsoft.com -Credential $credential -TenantId '<Your Tenant Id>'
$aadGraphToken = New-PartnerAccessToken -RefreshToken $refreshToken -Resource https://graph.windows.net -Credential $credential -TenantId '<Your Tenant Id>'

#MS Module
Connect-MsolService -AdGraphAccessToken $aadGraphToken.AccessToken -MsGraphAccessToken $graphToken.AccessToken


# Az Module
Connect-AzAccount -AccessToken $azureToken.AccessToken -GraphAccessToken $graphToken.AccessToken -TenantId '<TenantId>'

# AzureRM Module
Connect-AzureRmAccount -AccessToken $azureToken.AccessToken -GraphAccessToken $graphToken.AccessToken -TenantId '<TenantId>'

При применении этого и, выполнив следующую команду, я получаю сообщение об ошибке:

New-PartnerAccessToken -RefreshToken $refreshToken -Resource https://management.azure.com/ -Credential $credential -TenantId '<Your Tenant Id>'
New-PartnerAccessToken : Cannot validate argument on parameter 'RefreshToken'. The argument is null or empty. Provide an argument 
that is not null or empty, and then try the command again.
At line:1 char:38
+ New-PartnerAccessToken -RefreshToken $refreshToken -Resource https:// ...
+                                      ~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [New-PartnerAccessToken], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Store.PartnerCenter.PowerShell.Commands.NewPartnerAccessT 
   oken

После некоторого исследования я обнаружил, что параметр "-resource" больше не существует в соответствии с документацией: https://docs.microsoft.com/en-us/powershell/module/partnercenter/new-partneraccesstoken?view=partnercenterps-3.0

Тем не менее, согласно документации, относящейся к MSOnline, он показывает, что я должен иметь возможность использовать его: https://docs.microsoft.com/en-us/powershell/module/msonline/connect-msolservice?view=azureadps-1.0

Теперь я Я застрял без параметра ресурса Я не могу получить токены, необходимые для использования 3-х модулей.

Мой вопрос, есть ли другой способ использовать идентификатор приложения, refre sh токен, секрет, идентификатор арендатора для аутентификации с использованием powershell без вмешательства человека, если нет, как я могу заставить вышеуказанный метод работать для других модулей? так же, как я делал с партнерским центром.

1 Ответ

1 голос
/ 26 февраля 2020

По моим исследованиям. если версия вашего модуля PartnerCenter больше, чем 2.0.1909.1, он заменил параметр Resource параметром Scopes для командлетов Connect-PartnerCenter и New-PartnerAccessToken. Поэтому, пожалуйста, используйте следующий скрипт для получения токена доступа

New-PartnerAccessToken -ApplicationId 'xxxx-xxxx-xxxx-xxxx' -Credential $credential -RefreshToken $refreshToken -Scopes 'https://graph.windows.net/.default' -ServicePrincipal -Tenant 'xxxx-xxxx-xxxx-xxxx'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...