Microsoft Graph API - управление API-интерфейсом для бронирования было отклонено для этого запроса - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть простое веб-приложение ASP.Net, состоящее из .aspx web из облачного сервиса Azure. В моем приложении нет логина пользователя. Я хочу подключиться к Microsoft Graph API и использовать Microsoft Bookings API для получения коллекции BookingBusiness при загрузке моей домашней страницы без входа пользователя. В настоящее время я отлаживаю свое веб-приложение на рабочем столе с помощью эмулятора Azure. У меня есть доступ к премиум-аккаунту в офисе 365, связанный с моей учетной записью в Майкрософт (v-sheeal@microsoft.com), и я создал бизнес по бронированию, используя мои псевдонимы с помощью инструментов бронирования (https://outlook.office.com/owa/?path=/bookings).) Я зарегистрировал приложение в AAD в том же клиенте со всеми необходимыми разрешениями и предоставил идентификатор и секретный код в коде для получения токена доступа. Я использую учетные данные клиента для предоставления токена доступа и пытаюсь вызвать API бронирования. Я могу получить токен доступа, но когда код пытается получить список предприятий по бронированию, он дает исключение ниже.

DataServiceClientException: { "ошибка": { "код": "", "message": "В этом запросе отказано в авторизации.", "innerError": { "request-id": "d0ac6470-9aae-4cc2-9bf3-ac83e700fd6a", «дата»: «2018-09-03T08: 38: 29» } } }

Код и подробная информация о настройках зарегистрированного приложения приведены на снимке экрана ниже. .aspx.cs

private static async Task<AuthenticationResult> AcquireToken()
    {
        var tenant = "microsoft.onmicrosoft.com"; 
      //"yourtenant.onmicrosoft.com";
        var resource = "https://graph.microsoft.com/";
        var instance = "https://login.microsoftonline.com/";
        var clientID = "7389d0b8-1611-4ef9-a01f-eba4c59a6427";
        var secret = "mxbPBS10|[#!mangJHQF791";
        var authority = $"{instance}{tenant}";
        var authContext = new AuthenticationContext(authority);
        var credentials = new ClientCredential(clientID, secret);           

        var authResult = await authContext.AcquireTokenAsync(resource, 
     credentials);

        return authResult;
    }

     protected void MSBooking()
    {               
        var authenticationContext = new 
  AuthenticationContext(GraphService.DefaultAadInstance, 
  TokenCache.DefaultShared);
        var authenticationResult =  AcquireToken().Result;


    var graphService = new GraphService(
        GraphService.ServiceRoot,
        () => authenticationResult.CreateAuthorizationHeader());

       // Get the list of booking businesses that the logged on user can see.

        var bookingBusinesses = graphService.BookingBusinesses; ----- this 
       line throwing an exception "Authorization has been denied        for 
      this request."
    }

GraphService.cs

namespace Microsoft.Bookings.Client
{
    using System;
    using System.Net;

    using Microsoft.OData;
    using Microsoft.OData.Client;

    public partial class GraphService
    {
        /// <summary>
        /// The resource identifier for the Graph API.
        /// </summary>
        public const string ResourceId = "https://graph.microsoft.com/";

        /// <summary>
        /// The default AAD instance to use when authenticating.
        /// </summary>
        public const string DefaultAadInstance = 
       "https://login.microsoftonline.com/common/";

        /// <summary>
        /// The default v1 service root
        /// </summary>
        public static readonly Uri ServiceRoot = new 
       Uri("https://graph.microsoft.com/beta/");

        /// <summary>
        /// Initializes a new instance of the <see 
       cref="BookingsContainer"/> class.
        /// </summary>
        /// <param name="serviceRoot">The service root.</param>
        /// <param name="getAuthenticationHeader">A delegate that returns 
  the authentication header to use in each request.</param>
        public GraphService(Uri serviceRoot, Func<string> 
  getAuthenticationHeader)
            : this(serviceRoot)
        {
            this.BuildingRequest += (s, e) => e.Headers.Add("Authorization", 
      getAuthenticationHeader());
        }


  }

enter image description here enter image description here

enter image description here

1 Ответ

0 голосов
/ 04 сентября 2018

Согласно вашему описанию, я предполагаю, что вы хотите использовать Microsoft Bookings API.

Основываясь на предоставленных вами изображениях, вам не хватает определения области действия в вашем коде, а администрация неверна.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...