Миграция основного пользователя на принципала службы для аутентификации при включенном питании - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь перенести метод проверки подлинности с основного пользователя Power BI на основного участника службы.

на главном пользователе. Я использую msal с потоком проверки подлинности, как показано ниже: войдите в AAD -> запрос для AAD токен -> импорт файла pbix с API остальных с использованием токена AAD в качестве учетных данных

это код

$(document).ready(function () {
    myMSALObj.loginPopup(requestObj).then(function (loginResponse) {
        acquireTokenPopup();
    });
    Msal.UserAgentApplication
});

function acquireTokenPopup() {
    myMSALObj.acquireTokenSilent(requestObj).then(function (tokenResponse) {
        AADToken = tokenResponse.accessToken;
        importPBIX(AADToken);
    });
}

function importPBIX(accessToken) {
    xmlHttp.open("GET", "./importPBIX?accessToken=" + accessToken + "&pbixTemplate=" + pbixTemplate, true);
    //the rest of import process//
}

, поэтому возникает два вопроса: 1. какой тип потока будет, если Вместо этого я использую сервисный принципал? на моей голове и из информации, которую я прочитал из документа Microsoft, это было бы проще, например: запрос токена с использованием секретного ключа приложения -> импорт файла pbix с оставшимся API с использованием токена это правильно? 2. какой код я могу использовать для этого на javascript? Я думаю, что MSAL не может выполнить запрос токена с помощью субъекта службы. Буду признателен за любую информацию или учебник для этого.

BestS,

Ответы [ 2 ]

1 голос
/ 21 января 2020
  1. какой бы это был поток, если бы вместо этого я использовал принципала службы? на моей голове и из информации, которую я прочитал из документа Microsoft, это было бы проще, например: запросить токен с помощью секретного ключа приложения -> импорт pbix-файла с API остальных с помощью токена - это правильно?

Согласно моему исследованию, если вы хотите использовать субъект службы для получения Azure токена доступа AD, вы можете использовать поток предоставления учетных данных клиента enter image description here

  1. Клиентское приложение аутентифицируется на конечной точке выдачи токена Azure AD и запрашивает токен доступа.

  2. Azure Конечная точка выдачи токена AD выдает токен доступа.

  3. Маркер доступа используется для аутентификации на защищенном ресурсе.

  4. Данные из защищенного ресурса возвращается в клиентское приложение.

Относительно того, как получить токен доступа, пожалуйста, обратитесь к следующим шагам

  1. Регистрация Azure Приложение AD enter image description here * 104 4 *

  2. Настройка разрешений API enter image description here

  3. Получение токена доступа

POST https://login.microsoftonline.com/<tenant id>/oauth2/token
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials
&client_id=<>
&client_secret=<>
&resource=https://analysis.windows.net/powerbi/api

2. какой код я могу использовать для этого на javascript? Я думаю, что MSAL не может выполнить запрос токена с помощью субъекта службы. Буду признателен за любую информацию или учебник для этого.

Если вы хотите реализовать поток предоставления учетных данных клиента с помощью sdk, вы можете использовать adal-node. Для получения более подробной информации, пожалуйста, обратитесь к https://www.npmjs.com/package/adal-node.

Например

var AuthenticationContext = require('adal-node').AuthenticationContext;

var authorityHostUrl = 'https://login.microsoftonline.com/';
var tenant = 'myTenant.onmicrosoft.com'; // AAD Tenant name.
var authorityUrl = authorityHostUrl + '/' + tenant;
var applicationId = 'yourApplicationIdHere'; // Application Id of app registered under AAD.
var clientSecret = 'yourAADIssuedClientSecretHere'; // Secret generated for app. Read this environment variable.
var resource = ''; // URI that identifies the resource for which the token is valid.

var context = new AuthenticationContext(authorityUrl);

context.acquireTokenWithClientCredentials(resource, applicationId, clientSecret, function(err, tokenResponse) {
  if (err) {
    console.log('well that didn\'t work: ' + err.stack);
  } else {
    console.log(tokenResponse);
  }
});
0 голосов
/ 29 января 2020

благодаря ответу Джима я немного подправил свой код, и процесс аутентификации токена прошел гладко. Поскольку мои приложения использовали javascript в качестве внешнего интерфейса и python в качестве внутреннего, я решил выполнить этот процесс в python и вместо этого использовал библиотеку python msal. код выглядит так:

authority_host_uri = 'https://login.microsoftonline.com'
tenant = 'myTenantId'
authority_uri = authority_host_uri + '/' + tenant
client_id = 'myClienId'
client_secret = 'myClientSecretKey'
config={"scope":["https://analysis.windows.net/powerbi/api/.default"]}

app = ConfidentialClientApplication(client_id, client_credential=client_secret, authority=authority_uri)
token = app.acquire_token_for_client(scopes=config['scope'])

еще раз спасибо Джиму за помощь в этом.

бестов,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...