Я пытаюсь использовать связанные с календарем конечные точки Microsoft Graph API. Я зарегистрировал свое приложение в Azure AD и настроил его разрешения (фактически, я добавил весь список разрешений приложений для Microsoft Graph API просто для того, чтобы убедиться в этом)
Вы можете увидеть мой токен доступа ниже, хотя он немного длинен. jwt.ms также утверждает, что это токен Azure AD V1.
{
"typ": "JWT",
"nonce": "AQABAAAAAAC5una0EUFgTIF8ElaxtWjTfuFEc1xDrKW9OgoxxfapaiuriahgH-pwN7wMt0tMrHmt-nOLiWJm7xzuNTM9Un0NoRzBP_Yor0wOmspcQdql0SAA",
"alg": "RS256",
"x5t": "wULmYfsqdQuWtV_-hxVtDJJZM4Q",
"kid": "wULmYfsqdQuWtV_-hxVtDJJZM4Q"
}.{
"aud": "https://graph.microsoft.com",
"iss": "https://sts.windows.net/41dad557-6060-410f-a612-368cf36641f0/",
"iat": 1541058963,
"nbf": 1541058963,
"exp": 1541062863,
"aio": "42RgYDicbl/RHqaT8XTWla+XJ8j2AgA=",
"app_displayname": "GraphChatBotTest",
"appid": "36602029-65b0-44ee-a2bb-f18c0f154969",
"appidacr": "1",
"idp": "https://sts.windows.net/41dad557-6060-410f-a612-368cf36641f0/",
"oid": "ea391d2a-9e85-4387-99ba-68a28d077a65",
"roles": [
"Chat.UpdatePolicyViolation.All",
"Calls.JoinGroupCall.All",
"EduRoster.Read.All",
"OnlineMeetings.Read.All",
"Mail.ReadWrite",
"OnlineMeetings.ReadWrite.All",
"Device.ReadWrite.All",
"User.ReadWrite.All",
"Domain.ReadWrite.All",
"Application.ReadWrite.OwnedBy",
"SecurityEvents.Read.All",
"Calendars.Read",
"EduAssignments.ReadWrite.All",
"People.Read.All",
"Application.ReadWrite.All",
"Calls.InitiateGroupCall.All",
"Group.Read.All",
"Directory.ReadWrite.All",
"EduAssignments.ReadWriteBasic.All",
"MailboxSettings.Read",
"EduAdministration.Read.All",
"Calls.JoinGroupCallAsGuest.All",
"Sites.Read.All",
"Sites.ReadWrite.All",
"Contacts.ReadWrite",
"Group.ReadWrite.All",
"Sites.Manage.All",
"SecurityEvents.ReadWrite.All",
"Notes.Read.All",
"User.Invite.All",
"EduRoster.ReadWrite.All",
"Files.ReadWrite.All",
"Directory.Read.All",
"User.Read.All",
"EduAssignments.ReadBasic.All",
"EduRoster.ReadBasic.All",
"Files.Read.All",
"Mail.Read",
"Chat.Read.All",
"ChannelMessage.Read.All",
"EduAssignments.Read.All",
"Calendars.ReadWrite",
"identityriskyuser.read.all",
"EduAdministration.ReadWrite.All",
"Mail.Send",
"ChannelMessage.UpdatePolicyViolation.All",
"MailboxSettings.ReadWrite",
"Contacts.Read",
"IdentityRiskEvent.Read.All",
"AuditLog.Read.All",
"Member.Read.Hidden",
"Calls.AccessMedia.All",
"Sites.FullControl.All",
"Reports.Read.All",
"Calls.Initiate.All",
"Notes.ReadWrite.All"
],
"sub": "ea391d2a-9e85-4387-99ba-68a28d077a65",
"tid": "41dad557-6060-410f-a612-368cf36641f0",
"uti": "Vy3Z7a_gLEODSO81X4cLAA",
"ver": "1.0",
"xms_tcdt": 1487855898
}.[Signature]
Теперь, когда я использую конечные точки пользователя и группы, все работает нормально. Я могу получить всех пользователей, конкретного пользователя и то же самое относится к группам. Однако всякий раз, когда я пытаюсь использовать некоторые другие конечные точки, такие как / календари или события, я получаю 401 Несанкционированный ответ с кодом «Неизвестная ошибка».
{
"error": {
"code": "UnknownError",
"message": "",
"innerError": {
"request-id": "532d3476-b41b-4d8a-a0ed-b44367c16d7f",
"date": "2018-11-01T08:19:55"
}
}
}
Для справки, я пробовал и конечные точки v1.0, и конечные точки бета-тестирования с одинаковыми результатами. Согласно документации API, эти конечные точки (/calendars
, /events
и т. Д.) Должны быть доступны с необходимыми разрешениями приложения. В чем может быть проблема здесь? Любая помощь приветствуется.
Редактировать: добавление примера кода, чтобы показать, как я вызываю API
var uri =
$"https://graph.microsoft.com/v1.0/users/{userId}/events";
HttpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", accessToken);
var response = await HttpClient.GetAsync(uri);
Кроме того, когда я вызываю ту же конечную точку из обозревателя графиков (вошел в систему со своей личной учетной записью), я получаю успешный ответ.
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:
Когда мы регистрируем приложение с портала регистрации приложений (https://apps.dev.microsoft.com
) вместо портала Azure, происходит нечто забавное. Я могу успешно получить токен доступа, но когда я использую новое приложение для вызова /users
, я получаю ошибку Authorization_IdentityNotFound
, тогда как при вызове /events
я получаю UnknownError
. Приложение получило следующие разрешения: Calendars.ReadWrite
, User.Read.All
, Group.Read.All
. Возможно, еще важнее то, что это новое приложение не отображается на лазурном портале. Ни для меня, ни для админа. Надеюсь, это поможет пролить больше света на этот вопрос.
Редактирование последнего редактирования:
Оказывается, у приложения, которое я создал на Портале регистрации приложений, был другой клиент. После изменения идентификатора клиента для конечной точки /token
я смог получить успешный ответ при вызове /events
и /users
. Все еще задаюсь вопросом, какова причина оригинальной проблемы.