Ошибки источника данных POST API Power BI с помощью DMTS_InvalidEncryptionAlgorithmError - PullRequest
1 голос
/ 10 июля 2019

Я пытаюсь использовать Microsoft Power BI API до создать новый источник данных на шлюзе https://docs.microsoft.com/en-us/rest/api/power-bi/gateways/createdatasource. Для проверки я пытаюсь создать соединение с База данных Azure Sql с базовой аутентификацией.Я могу добавить источник данных с помощью графического пользовательского интерфейса Power BI без проблем, однако всякий раз, когда я пытаюсь использовать API, я получаю 400 - DMTS_InvalidEncryptionAlgorithmError.

Поле ключа - encryptionAlgorithm вbody, но, как указано в документации API, оно должно быть «None» для облачных источников данных.

Я также пытался использовать «RSA-OAEP», но это дает мне 400 - DM_GWPipeline_UnknownError.

В настоящее время я работаю с Postman, но я также пытался повторить тот же запрос с NodeJSс тем же результатом.

Любые намеки на решение будут очень полезны.

POST https://api.powerbi.com/v1.0/myorg/gateways/00000000-0000-0000-0000-000000000000/datasources

Заголовки

content-type: application/json,
Autorization: Bearer token

Тело

{
"datasourceType": "Sql",
"connectionDetails": "{\"server\":\"servername.database.windows.net\",\"database\":\"dbname\"}",
"credentialDetails": {
    "credentialType": "Basic",
    "credentials": "{\"credentialData\":[{\"name\":\"username\", \"value\":\"myusername\"},{\"name\":\"password\", \"value\":\"mypwd\"}]}",
    "encryptedConnection": "Encrypted",
    "encryptionAlgorithm": "None",
    "privacyLevel": "None"
},
"datasourceName": "new-datasource-name"
}

Сообщение об ошибке при использовании «Нет» - HTTP 400

{
"error": {
    "code": "DMTS_InvalidEncryptionAlgorithmError",
    "pbi.error": {
        "code": "DMTS_InvalidEncryptionAlgorithmError",
        "parameters": {},
        "details": [],
        "exceptionCulprit": 1
    }
}
}

Сообщение об ошибке при использовании «RSA-OAEP» - HTTP 400

{
"error": {
    "code": "DM_GWPipeline_UnknownError",
    "pbi.error": {
        "code": "DM_GWPipeline_UnknownError",
        "parameters": {},
        "details": [
            {
                "code": "DM_ErrorDetailNameCode_UnderlyingErrorMessage",
                "detail": {
                    "type": 1,
                    "value": "The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters. "
                }
            },
            {
                "code": "DM_ErrorDetailNameCode_UnderlyingHResult",
                "detail": {
                    "type": 1,
                    "value": "-2146233033"
                }
            }
        ]
    }
}
}

Ответы [ 2 ]

1 голос
/ 10 июля 2019

Я думаю, что вам нужно зашифровать свои учетные данные при загрузке - не очень четко указано в документации.Вы не можете просто загрузить бесплатный текст.

Имеет смысл для безопасности!

https://docs.microsoft.com/en-us/power-bi/developer/encrypt-credentials

0 голосов
/ 10 июля 2019

Просто для полноты, вот код узла, который вы можете использовать для шифрования ваших учетных данных.Использование библиотеки node-rsa

const nodeRSA  = require("node-rsa");

const credentials = '{\"credentialData\":[{\"name\":\"username\", \"value\":\"myusername\"},{\"name\":\"password\", \"value\":\"mypwd\"}]}';

const exponentString = 'AQAB';
const modulusString = 'rasdfsafsdfsadfsdafsdferasdasgfasgsfgdfgsdfgdsfgrgsrareasgasgasfasfasdfasdfsadfsadfgsadfsadfasfasdfsadfsdafasdfrgrhe4t345tge5g54g5gegdrg5tg45efgdfg5t=';

const key = new nodeRSA();

const modulus = new Buffer(modulusString, 'base64');
const exponent = new Buffer(exponentString, 'base64');

const pubKey = key.importKey({ n: modulus, e: exponent }, 'components-public');

const encrypted = pubKey.encrypt(credentials, 'base64');

console.log(encrypted)
...