Миграция главного пользователя в субъект-службу для аутентификации на встроенном power bi

Я пытаюсь перенести свой метод проверки подлинности с главного пользователя 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 с помощью rest API с использованием токена, это правильно? 2. Какой код я могу использовать для этого на javascript? Я думаю, что MSAL не может выполнить запрос токена с помощью субъекта-службы. был бы признателен за любую информацию или руководство по этому поводу.

лучшие


person oRoberto    schedule 20.01.2020    source источник


Ответы (2)


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

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

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

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

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

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

Чтобы узнать, как получить токен доступа, выполните следующие действия.

  1. Зарегистрируйте приложение Azure AD  введите описание изображения здесь  введите описание изображения здесь

  2. Настройте разрешения API  введите описание изображения здесь

  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);
  }
});
person Jim Xu    schedule 21.01.2020
comment
Привет, Джим, спасибо за объяснение. теперь у меня есть лучшее представление о том, как проходит аутентификация при использовании субъекта-службы. для самого кода, щас пытаюсь его использовать. но каждый раз я пытался использовать var AuthenticationContext = require ('adal-node'). AuthenticationContext; код. он всегда возвращается с именем модуля. adal-node еще не загружен для context: error, даже если я уже установил adal-node с помощью npm. - person oRoberto; 22.01.2020
comment
@oRoberto Если это полезно для вас, не могли бы вы отметить его? - person Jim Xu; 22.01.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'])

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

лучшие

person oRoberto    schedule 29.01.2020
comment
Каковы предварительные условия для доступа субъекта-службы к ресурсам Power BI? Я использовал ваш код, но ответ пуст. - person hui chen; 28.04.2020
comment
Привет, вы должны зарегистрировать свое приложение с помощью токена субъекта-службы при регистрации приложений в Azure. - person oRoberto; 07.05.2020