Как запросить токен доступа к Microsoft Graph API в приложении .NET Core?

Вопрос или проблема

Я пытаюсь создать быстрое и простое демонстрационное приложение для канала Teams, но застрял, пытаясь разобраться с Graph API. Я могу тестировать доступные конечные точки через Graph Explorer в браузере. У меня есть подписка на использование конечных точек, и мне просто нужно быть авторизованным, чтобы использовать Explorer.

Как запросить токен доступа в приложении .NET Core? Я пытался изучить документацию, чтобы понять, но это не ясно. Мне нужен идентификатор клиента, секрет клиента, определенный диапазон и другие вещи.

Что я не понимаю:

Как генерируются идентификатор клиента и секрет через регистрацию приложения в Entra, поскольку я не уверен, как регистрировать свое небольшое тестовое приложение для их генерации. Также как модифицируется диапазон по сравнению с умолчанием? Наконец, мне нужно указать свою учетную запись Microsoft Teams (учетные данные) в вызове API, чтобы он мог запрашивать конечные точки для данных, специфичных для моей учетной записи; каналы, в которых я состою, например. Как это настроить в коде .NET Core?

Ответ или решение

Запрос токена доступа для Microsoft Graph API в приложении .NET Core

Запрос токена доступа для использования Microsoft Graph API в приложении .NET Core — это важный шаг для взаимодействия с различными службами Microsoft, такими как Microsoft Teams. В этом руководстве будет подробно описан процесс получения токена, включая регистрацию приложения в Entra, получение Client ID и Client Secret, настройку областей (Scopes) и интеграцию вашего кода с .NET Core.

Шаг 1: Регистрация приложения в Entra

Чтобы получить Client ID и Client Secret, вам необходимо зарегистрировать ваше приложение в Azure Entra. Для этого выполните следующие шаги:

  1. Перейдите в Azure Portal.
  2. В меню слева выберите «Azure Active Directory».
  3. Перейдите в раздел «Регистрация приложений» и нажмите «Новая регистрация».
  4. Введите имя приложения (например, "TeamsChannelDemoApp").
  5. Выберите тип учетной записи, подходящий для вашего случая (для тестового приложения выберите "Учетные записи только в этом каталоге").
  6. Укажите URI перенаправления, если это необходимо (например, для тестирования можно использовать https://localhost).
  7. Нажмите «Зарегистрировать».

После регистрации:

  • На странице вашего приложения найдите Application (client) ID — это ваш Client ID.
  • Перейдите в раздел Certificates & secrets, чтобы создать новый секрет. Нажмите «New client secret», задайте описание и выберите срок действия, затем сохраните сгенерированный Client Secret.

Шаг 2: Настройка прав доступа (Scoping)

  1. На странице вашего приложения перейдите в раздел API permissions.
  2. Нажмите «Add a permission» и выберите Microsoft Graph.
  3. Выберите Delegated permissions для того, чтобы приложение использовало права предоставленные пользователем.
  4. Найдите и добавьте необходимые разрешения, такие как Channel.ReadBasic.All, если вы хотите получить данные о каналах Teams. После добавления не забудьте нажать кнопку «Grant admin consent for [Your Organization]», если это требуется.

Шаг 3: Получение токена доступа в .NET Core

Теперь, когда у вас есть Client ID, Client Secret и необходимые разрешения, вы можете запрашивать токены доступа к Microsoft Graph API. Для этого выполните следующие шаги.

Установка пакетов

Убедитесь, что у вас установлены необходимые NuGet пакеты:

dotnet add package Microsoft.Identity.Client
Конфигурация

Создайте класс для конфигурации вашего приложения, в котором будут храниться связанные данные:

public class GraphApiConfig
{
    public string ClientId { get; set; }
    public string ClientSecret { get; set; }
    public string TenantId { get; set; }
    public string[] Scopes { get; set; }
}
Запрос токена

Создайте метод для получения токена доступа:

using Microsoft.Identity.Client;
using System;
using System.Threading.Tasks;

public class TokenService
{
    private readonly GraphApiConfig _config;

    public TokenService(GraphApiConfig config)
    {
        _config = config;
    }

    public async Task<string> GetAccessTokenAsync()
    {
        var app = ConfidentialClientApplicationBuilder
            .Create(_config.ClientId)
            .WithClientSecret(_config.ClientSecret)
            .WithAuthority(new Uri($"https://login.microsoftonline.com/{_config.TenantId}"))
            .Build();
        string[] scopes = _config.Scopes;

        AuthenticationResult result;
        try
        {
            result = await app.AcquireTokenForClient(scopes).ExecuteAsync();
        }
        catch (MsalUiRequiredException ex)
        {
            // Обработка случая, когда требуется взаимодействие пользователя.
            throw new Exception("Authorization for token failed.", ex);
        }

        return result.AccessToken;
    }
}

Шаг 4: Использование токена для вызовов API

После получения токена доступа вы можете использовать его для выполнения запросов к Microsoft Graph API. Например, через HttpClient:

public async Task<string> GetTeamsChannelsAsync(string accessToken)
{
    using var client = new HttpClient();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

    var response = await client.GetAsync("https://graph.microsoft.com/v1.0/me/joinedTeams");
    response.EnsureSuccessStatusCode();

    return await response.Content.ReadAsStringAsync();
}

Заключение

Следуя этим шагам, вы сможете запросить токен доступа для Microsoft Graph API и реализовать функционал, связанный с Microsoft Teams в вашем приложении. Убедитесь, что у вас правильно настроены все параметры, а также что ваш код соответствует рекомендациям Microsoft. Удачи в разработке вашего приложения!

Оцените материал
Добавить комментарий

Капча загружается...