Как получить контакты из личных учетных записей Microsoft, используя Microsoft Authentication Library (MSAL) в javascript? - PullRequest
0 голосов
/ 03 июня 2019

Я реализовал библиотеку 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.

1 Ответ

0 голосов
/ 03 июня 2019

Вы не можете запросить user.read.all для учетных записей Microsoft (также именуемых).

Запрос области видимости должен выглядеть следующим образом:

scopes: ["user.read", "contacts.read"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...