У меня есть регистрация канала бота с настроенными настройками соединения OAuth. Параметры подключения OAuth определяют следующие области действия: Chat.ReadWrite User.Read User.ReadBasic.All email openid profile
.
Соответствующая регистрация приложения настроена для доступа к Учетным записям в любом организационном каталоге (Любой Azure AD каталог - Multitenant) :
В указанной регистрации приложения настроены разрешения в соответствии с запросом регистрации канала бота:
Я могу получить токен доступа из кода бота, используя регистрация этого канала бота, выполнив следующее (после входа в систему и согласия на запрашиваемые разрешения):
await botAdapter.GetAadTokensAsync(
turnContext,
oauthConnectionName, // the connection name as configured in the bot channel registration
new string[] { "https://graph.microsoft.com" },
turnContext.Activity.From.Id, // the Teams Id of the action invoker, a.k.a me
cancellationToken);
Я использую Microsoft.Graph.Beta версия 0.12.0-preview пакет nuget с Microsoft.Bot.Builder версия 4.7.2 пакет nuget.
Графический клиент построен так:
var graphClient = new GraphServiceClient(
new DelegateAuthenticationProvider((request) =>
{
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
return Task.CompletedTask;
}));
Наконец, вызов, вызывающий сообщение об ошибке «Запрещено»:
await graphClient.Chats[conversationId].Messages.Request().GetAsync();
Это соответствует вызову Graph API https://graph.microsoft.com/beta/chats/<conversationId>/messages
. Этот вызов, однако, успешно выполняется при вызове из Graph Explorer.
Я могу подтвердить, что утверждение scp
токена доступа содержит области разрешений, о которых я упоминал выше: Chat.ReadWrite User.Read User.ReadBasic.All email openid profile
. Те же области также есть в токене доступа, используемом Graph Explorer.
К разговору MS Teams, представленному <conversationId>
, присоединяется владелец этого токена доступа, а также бот.
Так почему этот вызов не выполняется из моего кода, но не вызывает его при вызове из Graph Explorer?