22.11.2018, 11:53 | #1 |
Молодой, подающий надежды
|
D365FO: PowerShell + DIXF
Всем доброго времени суток.
Пытаюсь загрузить в D365FO данные из package, хранящегося в Azure blob storage, через PowerShell, но получаю постоянно X++: Invoke-RestMethod : The remote server returned an error: (401) Unauthorized. Нашел пример скрипта авторизации через OAuth2, но попытки переделать его применительно к D365FO пока безуспешны. Текст найденного примера, для тех кому лень переходить по ссылкам X++: Function Grant-OAuth2PermissionsToApp{ Param( [Parameter(Mandatory=$true)]$Username, #global administrator username [Parameter(Mandatory=$true)]$Password, #global administrator password [Parameter(Mandatory=$true)]$azureAppId #application ID of the azure application you wish to admin-consent to ) $secpasswd = ConvertTo-SecureString $Password -AsPlainText -Force $mycreds = New-Object System.Management.Automation.PSCredential ($Username, $secpasswd) $res = login-azurermaccount -Credential $mycreds $context = Get-AzureRmContext $tenantId = $context.Tenant.Id $refreshToken = $context.TokenCache.ReadItems().RefreshToken $body = "grant_type=refresh_token&refresh_token=$($refreshToken)&resource=74658136-14ec-4630-ad9b-26e160ff0fc6" $apiToken = Invoke-RestMethod "https://login.windows.net/$tenantId/oauth2/token" -Method POST -Body $body -ContentType 'application/x-www-form-urlencoded' $header = @{ 'Authorization' = 'Bearer ' + $apiToken.access_token 'X-Requested-With'= 'XMLHttpRequest' 'x-ms-client-request-id'= [guid]::NewGuid() 'x-ms-correlation-id' = [guid]::NewGuid()} $url = "https://main.iam.ad.ext.azure.com/api/RegisteredApplications/$azureAppId/Consent?onBehalfOfAll=true" Invoke-RestMethod Uri $url Headers $header Method POST -ErrorAction Stop } Может кто-нибудь сталкивался уже с аналогичной задачей и может поделиться некоторыми наработками?
__________________
Кононов Пётр Последний раз редактировалось pedrozzz; 22.11.2018 в 11:56. |
|
22.11.2018, 14:27 | #2 |
Молодой, подающий надежды
|
Сам вопрос задал, сам решил. Если вдруг кому пригодится.
Сначала некоторые подготовительные работы Цитата:
Step 1. Authentication. For authentication, it is required to create an azure based application. Once this application creation is done, then you will get your ‘Client ID’ (or it is known as Application ID as well in azure portal for the application) and then you can generate (& Save) Client secret key as well. Both ‘ClientID’ and ‘Client Secret Key’ is required
Step 2. Registering and authorizing this application ID (or client ID) in Dynamics environment. Ensure that this ‘Client ID’ exist in Dynamics environment: Modules > System administration > Setup > Azure active directory applications. If record does not exist on the form, create a new one with details about Client ID, name:, and user Id. Ensure User ID = Admin. X++: $axBaseURL = "https://YOUR_NAME.cloudax.dynamics.com" function D365-LoadPackage { [cmdletbinding()] param( [Parameter(Mandatory=$true)]$tenantId, [Parameter(Mandatory=$true)]$client_id, [Parameter(Mandatory=$true)]$client_Secret_key ) $body = "resource=" + $axBaseURL + "&client_id=" + $client_id +"&client_secret=" + $client_Secret_key + "&grant_type=client_credentials" $url = "https://login.windows.net/" + $tenantId + "/oauth2/token" $apiToken = Invoke-RestMethod Uri $url -Method POST -Body $body -ContentType 'application/x-www-form-urlencoded' $url = "$axBaseURL/data/DataManagementDefinitionGroups/Microsoft.Dynamics.DataEntities.ImportFromPackage" $header = @{ 'Authorization' = 'Bearer ' + $apiToken.access_token } $body = @" { "packageUrl":"https://YOUR_ADDRESS.blob.core.windows.net/BLOB_NAME/FileName.zip", "definitionGroupId":"pk test", "executionId":"", "execute":"true", "overwrite":"true", "legalEntityId":"DAT" } "@ Invoke-RestMethod –Uri $url –Method POST –Headers $header -Body $body -ContentType "application/json" -ErrorAction Stop }
__________________
Кононов Пётр |
|
|
За это сообщение автора поблагодарили: Vadik (1), sukhanchik (2), Alex_KD (3). |
27.11.2018, 11:16 | #3 |
Участник
|
Спасибо.
А как AX блоб читает? Отдельно надо SAS token и тп настраивать?
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
27.11.2018, 16:18 | #4 |
Молодой, подающий надежды
|
На текущий момент с безопасностью BLOB пока не заморачивались, файл доступен на скачивание всем желающим по ссылке. Данный скрипт пока лишь "proof of work" для дальнейшей автоматизации некоторых процессов.
__________________
Кононов Пётр |
|
24.12.2018, 12:52 | #5 |
Участник
|
JFI Мой блог с примером PowerShell скрипта который читает данные через OData + Авторизация https://vmoskalenkoblog.wordpress.co...-dynamics-365/
|
|
|
За это сообщение автора поблагодарили: Vadik (1). |
Теги |
data management, dyn365fo, odata, powershell, интеграция |
|
|