Я пытаюсь создать раскрывающийся список со всеми пользователями моего арендатора Office365. Я создал приложение в Azure AD и дал ему все необходимые разрешения. Я дал все разрешения для Microsoft Graph на самом деле, приложение и делегировал. Все они.Разрешения API-интерфейса Microsoft для не-админов?
Затем я написал свой сценарий, чтобы запросить всех пользователей с помощью https://graph.microsoft.com/v1.0/users
.
У меня был администратор моего арендатора и принимал разрешения, а затем выводил список пользователей в пользовательском интерфейсе. Прекрасно работает для администратора
Я не админ, но когда я иду на страницу, я получаю следующее сообщение об ошибке:
This application requires application permissions to another application. Consent for application permissions can only be performed by an administrator. Sign out and sign in as an administrator or contact one of your organization's administrators.
Мне нужно знать, если это будет работать для пользователей с еще более низкими разрешениями. Из того, что я понимаю, запрос API и приложение работает под разрешениями, предоставляемыми приложению в Azure. Таким образом, даже если пользователь как «Только для чтения», запрос не работает под пользователем, он работает под созданным мной приложением. Так почему я должен получить ошибку относительно разрешений?
Это код, я использую:
(function() {
"use strict";
// Some samples will use the tenant name here like "tenant.onmicrosoft.com"
// I prefer to user the subscription Id
var subscriptionId = "metenant.onmicrosoft.com";
// Copy the client ID of your AAD app here once you have registered one, configured the required permissions, and
// allowed implicit flow https://msdn.microsoft.com/en-us/office/office365/howto/get-started-with-office-365-unified-api
var clientId = "cccb1f2f-xxx-x-xxxxx-x-x-x-x-x-";
window.config = {
// subscriptionId: subscriptionId,
clientId: clientId,
postLogoutRedirectUri: window.location.origin,
endpoints: {
graphApiUri: 'https://graph.microsoft.com'
},
cacheLocation: 'localStorage' // enable this for IE, as sessionStorage does not work for localhost.
};
var authContext = new AuthenticationContext(config);
// Check For & Handle Redirect From AAD After Login
var isCallback = authContext.isCallback(window.location.hash);
authContext.handleWindowCallback();
if (isCallback && !authContext.getLoginError()) {
window.location = authContext._getItem(authContext.CONSTANTS.STORAGE.LOGIN_REQUEST);
}
// If not logged in force login
var user = authContext.getCachedUser();
// NOTE: you may want to render the page for anonymous users and render
// a login button which runs the login function upon click.
if (!user) authContext.login();
// Acquire token for Files resource.
authContext.acquireToken(config.endpoints.graphApiUri, function (error, token) {
// Handle ADAL Errors.
if (error || !token) {
console.log('ADAL error occurred: ' + error);
return;
}
// Execute GET request to Files API.
var filesUri = config.endpoints.graphApiUri + "/v1.0/users";
$.ajax({
type: "GET",
url: filesUri,
headers: {
'Authorization': 'Bearer ' + token,
}
}).done(function (response) {
console.log('Successfully fetched from Graph.');
console.log(response);
var container = $(".container")
container.empty();
$.each(response.value, function(index, item) {
container.append($('<li>').text(item.displayName + " " + item.mail + " " + item.mobilePhone))
})
}).fail(function (response) {
var err = JSON.parse(response.responseText)
console.log('Failed:', err.error.message);
});
});
})();
Похоже, что вы передаете текущий входной токен пользователя в Graph API. Вы можете дать правильное разрешение директору службы в своем арендаторе, а затем получить токен главного сервиса и использовать его для вызова Graph. – Aram
Если я использую ADAL и clientID для приложения, не должен ли я передавать вход в приложение API Graph, а не текущий пользователь? Я добавил код, который я использую, чтобы сделать это – Batman