Я реализовал библиотеку MSAL с помощью информационной панели Azure AD, предоставил разрешения для user.read, user.read.all, contacts.read, contacts.read.all, openid, profile, directory.read.all. Арендаторы (учетные записи в одной организации) могут входить в свои учетные записи и получать свои контакты с помощью токена доступа. Когда я пытаюсь использовать личную учетную запись Microsoft, вход в систему работает хорошо, я могу получить токен доступа, но когда я выполняю вызов API Graph Microsoft с использованием конечной точки (https://graph.microsoft.com/v1.0/me/contacts), я получаю 401 несанкционированную ошибку.
Когда я проверяю объект ответа на запрос для получения токена доступа, для арендаторов ответ включает в себя массив областей:
scopes: Array(13)
0: "Calendars.Read"
1: "Calendars.Read.Shared"
2: "Calendars.ReadWrite"
3: "Calendars.ReadWrite.Shared"
4: "Contacts.Read"
5: "Directory.AccessAsUser.All"
6: "Directory.Read.All"
7: "openid"
8: "profile"
9: "User.Read"
10: "User.Read.All"
11: "User.ReadBasic.All"
12: "email"
и
для лицевых счетов, это:
scopes: Array(2)
0: "openid"
1: "profile"
Почему-то личные учетные записи не получают разрешения для областей, предоставленных администратором.
Также поддерживаемый тип учетной записи для моего зарегистрированного приложения:
Accounts in any organizational directory and personal Microsoft accounts (e.g. Skype, Xbox, Outlook.com)
All users with a work or school, or personal Microsoft account can use your application or API. This includes Office 365 subscribers.
Вот конфигурация в моем коде для входа в систему пользователя:
let msalConfig = {
auth: {
clientId: <client_id>
};
let signinScopes = ['user.read.all', 'contacts.read'];
и области, которые я передаю при запросе токена доступа:
let tokenRequest = {
scopes: ["user.read.all"]
};
Когда я передаю токен ниже, он выдает ошибку «Запрос отклонен, поскольку одна или несколько запрошенных областей не авторизованы или просрочены. Пользователь должен сначала войти в систему и предоставить клиентскому приложению доступ к запрошенной области. '
var tokenRequest = {
scopes: ["user.read.all", "contacts.read"]
};
Я ожидаю получить контакты всех подписанных в учетных записях Microsoft.