Как вызвать конечные точки Microsoft Teams OnlineMeeting через Microsoft Graph API с помощью консольного приложения? - PullRequest
0 голосов
/ 23 апреля 2020

Я следовал примеру кода, приведенному в следующей ссылке Microsoft и успешно смог получить список пользователей.

Мое зарегистрированное приложение также в Active Directory Azure иметь разрешение приложения «OnlineMeeting.ReadWrite.All».

Но когда я пытаюсь вызвать вызов для создания собрания, отправив запрос в конечную точку "https://graph.microsoft.com/v1.0/me/onlineMeetings". Я получаю 403 запрещенную ошибку. Любая идея, почему я получаю это?

1 Ответ

2 голосов
/ 24 апреля 2020

Для графика api создания онлайн-собраний https://graph.microsoft.com/v1.0/me/onlineMeetings мы видим, что учебник показывает, что он не поддерживает «Разрешение приложения» для его вызова. Он просто поддерживает «делегированное разрешение», поэтому мы можем просто запросить его по потоку предоставления пароля, но не по потоку учетных данных клиента.

enter image description here

Обновление:

Если вы хотите запросить график API для создания онлайн-собрания, мы можем просто использовать поток предоставления пароля или код авторизации. Здесь предоставьте образец потока предоставления пароля (имя пользователя и пароль) для вашей справки, используйте этот образец, чтобы получить токен и запросить график api по этому токену. Вы также можете найти этот образец в этом руководстве .

static async Task GetATokenForGraph()
{
 string authority = "https://login.microsoftonline.com/contoso.com";
 string[] scopes = new string[] { "user.read" };
 IPublicClientApplication app;
 app = PublicClientApplicationBuilder.Create(clientId)
       .WithAuthority(authority)
       .Build();
 var accounts = await app.GetAccountsAsync();

 AuthenticationResult result = null;
 if (accounts.Any())
 {
  result = await app.AcquireTokenSilent(scopes, accounts.FirstOrDefault())
                    .ExecuteAsync();
 }
 else
 {
  try
  {
   var securePassword = new SecureString();
   foreach (char c in "dummy")        // you should fetch the password
    securePassword.AppendChar(c);  // keystroke by keystroke

   result = await app.AcquireTokenByUsernamePassword(scopes,
                                                    "joe@contoso.com",
                                                     securePassword)
                      .ExecuteAsync();
  }
  catch(MsalException)
  {
   // See details below
  }
 }
 Console.WriteLine(result.Account.Username);
}
...