Как создавать / читать календари и события Azure Activity Directory [Microsoft.Graph] - PullRequest
0 голосов
/ 06 ноября 2018

Мы хотим взаимодействовать с календарем Office 365, в данный момент мы вызываем Microsoft Graph, но получаем 401 (неавторизовано).

Мы используем библиотеку Microsoft.Graph и обычные пользователи get (graphServiceClient.Users.Request (). GetAsync ()) работают, но создание Календаря или События не работает. (ни GraphServiceClient.Me. [...]. Request (). GetAsync () работает).

Мы пытаемся выполнить этот вызов вручную, мы не нашли способ сделать это через библиотеку.

call to Microsoft Graph Calendar

И вот как мы получаем токен (Мы используем аутентификацию клиента, а не аутентификацию пользователя).

How we get the token

Отчаянно мы дали все разрешение на приложение, но мы все еще получаем 401

enter image description here

Токен, проанализированный с помощью jwt.io:

{
      "aud": "https://graph.microsoft.com",
      "iss": "https://sts.windows.net/11111111-24c0-480b-8ae3-a3ac34592a1a/",
      "iat": 1541581025,
      "nbf": 1541581025,
      "exp": 1541584925,
      "aio": "11111111111/AAAAA+115sO7D/yAwA=",
      "app_displayname": "CalendarCrawler",
      "appid": "11111111-efc2-4b9d-ae48-a04977183bd1",
      "appidacr": "1",
      "e_exp": 262800,
      "idp": "https://sts.windows.net/11111111-24c0-480b-8ae3-a3ac34592a1a/",
      "oid": "11111111-15f2-479c-9485-7cb9b5cce691",
      "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": "11111111-15f2-479c-9485-7cb9b5cce691",
      "tid": "11111111-24c0-480b-8ae3-a3ac34592a1a",
      "uti": "CFOL_8eguUS2aGh5-jgOAA",
      "ver": "1.0",
      "xms_tcdt": 1541410090
    }

Есть предложения?

Заранее спасибо

[EDIT] Мы сделали еще один вопрос более понятным, пожалуйста, следуйте Как использовать Microsoft.Graph с авторизацией клиента и не получать 401

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

На основе связанных API, таких как Post events API, мы можем знать, что требуется разрешение Calendars.ReadWrite. Но для этого также требуется согласие администратора, поэтому, пожалуйста, не забудьте "Предоставить разрешения". Если вы используете учетную запись администратора, вы можете сделать это.

enter image description here

Мы пытаемся выполнить этот вызов вручную, мы не нашли способ сделать это через библиотеку.

Следующий код демонстрирует, как получить / создать календари и создать событие через библиотеку.

Примечание : пользователь должен иметь учетную запись office365 или получить исключение ResourceNotFound.

string graphResourceId = "https://graph.microsoft.com/";
string authority = "https://login.microsoftonline.com/{0}";
string tenantId = "tenantId";
var accessToken = authContext.AcquireTokenAsync(graphResourceId, new ClientCredential(clientId,secret)).Result.AccessToken;
AuthenticationContext authContext = new AuthenticationContext(authority);
var graphserviceClient = new GraphServiceClient(
                new DelegateAuthenticationProvider(
                    requestMessage =>
                    {
                        requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", accessToken);

                        return Task.FromResult(0);
                    }));

//get calendars
var calendars = graphserviceClient.Users["userObjectId"].Calendars.Request().GetAsync().Result
//new calendar
var calendar = graphserviceClient.Users["userObjectId"].Calendars.Request().AddAsync(
            new Calendar {
               Name = "name"
            }).Result

//new event
var cal = graphserviceClient.Users["userObjectId"].Events.Request().AddAsync(
            new Event {
                Subject = "test",
                Start = new DateTimeTimeZone {DateTime = "2018-11-07T00:56:52.584Z",TimeZone = "UTC" },
                End = new DateTimeTimeZone { DateTime = "2018-11-07T01:56:52.584Z", TimeZone = "UTC" }

            }).Result;
0 голосов
/ 06 ноября 2018

Я бы попробовал позвонить из Graph Explorer на портале для разработчиков , чтобы проверить, является ли проблема разрешением AD. Если вы добились успеха, проблема не в разрешении AD, а в создании токена.

Изображение

https://i.imgur.com/paXK3Hz.png

Дополнительная информация https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/api/user_post_events

...