Я использую приложение Microsoft Graph API для получения информации о сотрудниках и не являюсь администратором Azure. Администратор моей организации предоставил мне прикрепленные разрешения. Даже при наличии разрешений я получаю сообщение об ошибке, Код: Authorization_RequestDenied Сообщение: Недостаточно прав для завершения операции.
Я получаю Клиента правильно. Можете ли вы помочь устранить эту ошибку?


Обратите внимание: чтобы получить доступ к информации о пользователе, вам необходимо сгенерировать токен доступа, передав область
User.Read.All.
Создано приложение Microsoft Entra ID:

Сгенерированный токен доступа с использованием следующей конечной точки:
https://login.microsoftonline.com/common/oauth2/v2.0/authorize?
&client_id=ClientID
&response_type=token+id_token
&redirect_uri=https://jwt.ms
&response_mode=fragment
&scope=openid offline_access User.Read.All
&state=12345
&nonce=12345
Токены доступа и идентификатора успешно сгенерированы:

Если вы используете токен идентификатора для доступа к информации пользователя, вы получите ошибку 401, поэтому используйте токен доступа для получения сведений о пользователе.
Раскодируйте токен доступа и убедитесь, что аудит представляет собой Microsoft Graph и присутствует область User.Read.All:

Передайте указанный выше токен доступа, и я смогу успешно получить доступ к информации о пользователе токена:
https://graph.microsoft.com/v1.0/users?$select=DisplayName,EmployeeId,employeeHireDate,employeeLeaveDateTime,employeeType

Я использую графическое приложение Microsoft с идентификатором клиента и секретным идентификатором. То, как вы сгенерировали токен, сильно отличается от того, как я его сгенерировал. Это для приложения Microsoft Graph API?
Да, это для приложения Microsoft Graph Api.
Можете ли вы расшифровать токен в jwt.ms и проверить, существуют ли роли?
Это то, что я получаю, когда декодирую токен. "roles": [ "Sites.Selected", "Mail.ReadWrite", "Mail.Send" ],
Чтобы устранить ошибку, токен доступа должен иметь область действия User.Read.All.
когда я вижу снимок экрана с разрешениями, я вижу, что они делегированы, там не говорится о приложении, как в случае с другими авторизациями. Что тогда означает делегат?
Как вы генерируете токен доступа?
AFAIK вы используете поток учетных данных клиента для создания токена доступа и предоставления делегированных разрешений API.
Попробуйте предоставить разрешение API типа приложения User.Read.All или сгенерируйте токен доступа с помощью интерактивного потока пользователя, если вы хотите делегировать разрешения API.
Используя идентификатор приложения и токен доступа. как показано ниже. Dim clientId As String = "XXXXXXXXXXXXXXXXXXXXxx" Dim clientSecret As String = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxxx" Dim tenantId As String = "XXXXXXXXXXXXXXXXXXXXXXXxxxxx" Dim Authority As String = $"login.microsoftonline.com {tenantId}" Dim protectedClientApplication As IConfidentialClientApplication = ConfidentialClientApplicationBuilder.Create(clientId).WithClientSecret(clientSecret).WithAuthority(aauthority).Build() Dim области As String() = {"graph.microsoft.com/.default"}
Тусклый аутентификацияResult = Ожидание конфиденциальногоClientApplication.AcquireTokenForClient(scopes).ExecuteAsync() Тусклый accessToken As String = аутентификацияResult.AccessToken
Тусклый графКлиент = Новый GraphServiceClient (Новый DelegateAuthenticationProvider (Функция (requestMessage) requestMessage.Headers.Authorization = New System.Net.Http.Headers.AuthenticationHeaderValue («Носитель», accessToken) Return Task.CompletedTask End Function))
Я не администратор, поэтому не могу предоставить разрешения. Разрешение оценено как делегированное.
Давайте продолжим обсуждение в чате.
К какой конечной точке вы имеете доступ? /пользователи? Как вы проходите аутентификацию?