Как войти в приложение Azure с пользователем из другого арендатора?

Я создал приложение в Active Directory через "Регистрация приложений (предварительный просмотр)" и использую библиотеку аутентификации Microsoft (MSAL.js) для входа в приложение. Приложение будет выполнять вызовы API с областью действия user_impersonation, поэтому я включил это в приложении.

Я также хотел бы, чтобы пользователи, которые не были добавлены к арендатору, могли входить в систему и использовать приложение, поэтому я установил для signInAudence значение AzureADandPersonalMicrosoftAccount. Если я правильно понимаю, это позволит любой учетной записи, независимо от арендатора, членом которого он является, войти.

Однако, когда я делаю запрос на вход в приложение с учетной записью, которая не является пользователем в клиенте приложений, я получаю сообщение об ошибке: "Выбранная учетная запись пользователя не существует в клиенте" MyTenant "и не может получить доступ к приложению" MyApplicationID " в этом арендаторе. Сначала необходимо добавить учетную запись в качестве внешнего пользователя в клиенте. Пожалуйста, используйте другой аккаунт.'

Я использую следующий JavaScript, чтобы сделать звонок:

var applicationConfig = {
    clientID: "MYCLIENTID",
    authority: "https://login.microsoftonline.com/MYTENANTID",
    graphScopes: ["https://management.azure.com/user_impersonation"],
    graphEndpoint: "https://graph.microsoft.com/v1.0/me"
};

var headers = new Headers();

var userAgentApplication = new Msal.UserAgentApplication(applicationConfig.clientID, applicationConfig.authority, tokenReceivedCallback);

function clicked(){
    console.log('clicked');
    userAgentApplication.loginPopup(applicationConfig.graphScopes).then(function (idToken) {
        userAgentApplication.acquireTokenSilent(applicationConfig.graphScopes).then(function (accessToken) {
            var bearer = "Bearer " + accessToken;
            headers.append("Authorization", bearer);
            var options = {
                method: "GET",
                headers: headers
            };
            var endpoint = "https://management.azure.com/subscriptions?api-version=2016-06-01";
            fetch(endpoint, options).then(function (response) {
                var body = response.body;
            });
        }, function (error) {
        });
    }, function (error) {
        //login failure
    });
}

Что-то мне не хватает, чтобы заставить это работать, или я неправильно понимаю параметр AzureADandPersonalMicrosoftAccount?

2 ответа

Решение

Вы указали свои полномочия как: https://login.microsoftonline.com/MYTENANTID,

Вы должны указать это как https://login.microsoftonline.com/organizations/v2.0, это позволяет любой учетной записи для входа в систему.

Это позволяет пользователям из любого клиента Azure AD войти в систему. Обратите внимание, что мы не можем использовать общие, так как вы хотите получить доступ к API Azure.

Если вы укажете идентификатор арендатора, то только пользователи из этого арендатора смогут войти в систему.

Если вы хотите, чтобы пользователь из разных арендаторов входил в ваше приложение, вы должны зарегистрировать многопользовательское приложение в Azure AD. Для более подробной информации, пожалуйста, обратитесь к документу. Между тем, вам нужно указать свои полномочия как https://login.microsoftonline.com/common/v2.0,

Другие вопросы по тегам