Как войти в приложение 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.info('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»?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
558
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

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

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

Тестируя «общие» полномочия, я обнаружил, что если я использую область «user.read», все работает, за исключением того, что мой токен доступа недействителен для запросов user_impersonation. Используя область «user_impersonation», личные учетные записи сообщают «ваш адрес электронной почты или пароль неверен» при входе в систему. Рабочая учетная запись может войти с ошибкой: «Использование приложения «auth_test» в настоящее время не поддерживается для вашей организации mydomain.com, потому что это находится в неуправляемом состоянии. Администратор должен заявить о праве собственности на компанию, проверив DNS для mydomain.com, прежде чем приложение auth_test сможет быть подготовлено».

Pottsiex5 27.02.2019 10:46

О, вы получаете доступ к Azure API! Тогда вы не можете использовать обычное, вы должны использовать «организации» вместо общего. Это связано с тем, что личные учетные записи не могут иметь доступ к подписке Azure, они должны быть членами Azure AD.

juunas 01.03.2019 08:45

Ах хорошо. Спасибо за ответ :)

Pottsiex5 02.03.2019 12:28

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

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