Мы разрабатываем настольное приложение, которое использует Graph-API для доступа к информации из OneDrive, команд и другой информации.
Один из наших клиентов получает запрос 400 BAD при доступе к https://graph.microsoft.com/beta/me/joinedTeams.
Приложение зарегистрировано как мультитенантное приложение в AAD. Приложению требуется согласие администратора, чтобы получить все привилегии (делегированные). Мы выкатились к нескольким клиентам без проблем.
Теперь у нас есть пользователь, который получает запрос 400 BAD при доступе к API команд. Согласие было предоставлено администратором.
Мы посмотрели на возвращенный токен jwt, и User.Read.All было предоставлено.
Доступ к OneDrive отлично работает для этого пользователя. Следовательно, токен должен быть действительным и правильно прикрепленным к запросу.
Но при доступе к / me / team возвращается неверный запрос
Вызов возвращает следующее исключение
Status Code: BadRequest
Microsoft.Graph.ServiceException: Code: AuthenticationError
Message: Error authenticating with resource.
Inner error
bei Microsoft.Graph.HttpProvider.<SendAsync>d__18.MoveNext()
--- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde ---
bei System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
bei Microsoft.Graph.BaseRequest.<SendRequestAsync>d__35.MoveNext()
--- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde ---
bei System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
bei Microsoft.Graph.BaseRequest.<SendAsync>d__31`1.MoveNext()
--- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde ---
bei System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
bei Microsoft.Graph.UserJoinedTeamsCollectionRequest.<GetAsync>d__4.MoveNext()
--- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde ---
bei System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
bei yourMail.Graph.Service.GraphAccess.TeamsAccess.<GetMyTeamGroups>d__4.MoveNext()
Мы используем microsoft.graph (из Nuget) Версия 1.17
GraphServiceClient graphClient = CreateGraphClient();
IUserJoinedTeamsCollectionPage result = await graphClient.Me.JoinedTeams.Request().GetAsync();
return result.ToList();
Дополнительный код
protected GraphServiceClient CreateGraphClient()
{
//Get JWT Token via Microsoft.Client.Identity
string accessToken = AccessTokenProvider.GetAuthenticationToken(Permissions);
if (accessToken == null)
{
throw new InvalidOperationException("Authentication failed.");
}
// Add bearer token to request
IAuthenticationProvider authenticationProvider = CreateAuthenticationProvider(accessToken);
var result = new GraphServiceClient(GraphEndpoints.BetaApi, authenticationProvider)
{
PerRequestAuthProvider = () => authenticationProvider
};
return result;
}
private IAuthenticationProvider CreateAuthenticationProvider(string accessToken)
{
var result = new DelegateAuthenticationProvider((requestMessage) =>
{
requestMessage.Headers.Authorization = new AuthenticationHeaderValue(CoreConstants.Headers.Bearer, accessToken);
return Task.FromResult(0);
});
return result;
}
Пользователь может получать доступ к командам в браузере инастольный клиент. Команды должны быть включены в арендаторе пользователей, и должна присутствовать лицензия.
- Существуют ли дополнительные политики AAD, которые могут блокировать доступ к командам?
- Есть ли способ отладить это? Например, может ли администратор арендатора включить файл журнала, в котором указано, почему доступ не был предоставлен?