Как получить список информации о пользователях из приложения Azure AD, вызвав Microsoft Graph API из ASP.NET Core Web API?

Я написал этот code - этот API должен возвращать список информации о пользователе моего приложения Azure AD (имеет делегированное разрешение - User.ReadBasic.All). Я сделал настройки для

в файле appsettings.json. Но я получаю ошибку "401 Unauthorized", даже если я отправил запрос с токеном из Postman.

Я прикрепляю изображение - Вот как я добавил токен в заголовок запроса

Я также получаю правильный токен. Но когда я отправляю запрос get, я получаю 401 Unauthorized. Вместо этого я хочу информацию о пользователе.

Что я делаю не так?

"TenantId": "","ClientId": "" & "ClientSecret": "" 
namespace WebApplication4.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class UsersController : ControllerBase
    {
        private readonly ITokenAcquisition _tokenAcquisition;

        public UsersController(ITokenAcquisition tokenAcquisition)
        {
            _tokenAcquisition = tokenAcquisition;
        }

        [HttpGet]
        public async Task<IActionResult> GetUsers()
        {
            try
            {
                // Acquire the access token for Microsoft Graph
                var token = await _tokenAcquisition.GetAccessTokenForUserAsync(new[] { "User.ReadBasic.All", "User.Read" });

                // Create the GraphServiceClient with an authentication provider
                var graphClient = new GraphServiceClient(new AuthProvider(token));

                var usersRequestBuilder = graphClient.Users;

                var users = await usersRequestBuilder
                    .GetAsync(requestConfiguration: request =>
                    {
                        request.QueryParameters.Select = new[] { "displayName", "userType", "mail" };
                    });

                return Ok(users);
            }
            catch (Exception ex)
            {
                return StatusCode(StatusCodes.Status500InternalServerError, "An error occurred while fetching users.");
            }
        }

        private class AuthProvider : IAuthenticationProvider
        {
            private readonly string _token;

            public AuthProvider(string token)
            {
                _token = token;
            }

            public async Task AuthenticateRequestAsync(RequestInformation request, Dictionary<string, object>? additionalAuthenticationContext = null, CancellationToken cancellationToken = default)
            {
                // Set the Authorization header
                request.Headers.Add("Authorization", $"Bearer {_token}");
                await Task.CompletedTask;
            }
        }
    }
}
Панкратий
Вопрос задан2 мая 2024 г.

1 Ответ

2
Фаина
Ответ получен15 сентября 2024 г.

Ваш ответ

Загрузить файл.