Я создал приложение в своем 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»?





Вы указали свои полномочия как: https://login.microsoftonline.com/MYTENANTID.
Вам нужно указать его как https://login.microsoftonline.com/organizations/v2.0, это позволяет любой учетной записи войти в систему.
Это позволяет пользователям из любого клиента Azure AD входить в систему. Обратите внимание, что мы не можем использовать common, так как вы хотите получить доступ к Azure API.
Если вы укажете идентификатор арендатора, только пользователи из этого арендатора смогут войти в систему.
О, вы получаете доступ к Azure API! Тогда вы не можете использовать обычное, вы должны использовать «организации» вместо общего. Это связано с тем, что личные учетные записи не могут иметь доступ к подписке Azure, они должны быть членами Azure AD.
Ах хорошо. Спасибо за ответ :)
Если вы хотите разрешить пользователям разных клиентов входить в ваше приложение, необходимо зарегистрировать мультитенантное приложение в Azure AD. Для получения более подробной информации см. документ. При этом вам необходимо указать свои полномочия как https://login.microsoftonline.com/common/v2.0.
Тестируя «общие» полномочия, я обнаружил, что если я использую область «user.read», все работает, за исключением того, что мой токен доступа недействителен для запросов user_impersonation. Используя область «user_impersonation», личные учетные записи сообщают «ваш адрес электронной почты или пароль неверен» при входе в систему. Рабочая учетная запись может войти с ошибкой: «Использование приложения «auth_test» в настоящее время не поддерживается для вашей организации mydomain.com, потому что это находится в неуправляемом состоянии. Администратор должен заявить о праве собственности на компанию, проверив DNS для mydomain.com, прежде чем приложение auth_test сможет быть подготовлено».