GetConversationMembersAsync返回403(禁止访问)

时间:2018-12-19 03:26:23

标签: c# http-status-code-403 microsoft-teams

我正在开发消息传递扩展,并试图获取正在使用该应用程序的用户的电子邮件地址。

此应用正在内部使用,我正在使用电子邮件地址查询Active Directory中的用户名。

当尝试使用GetConversationMembersAsync方法时,我收到一个403(禁止)异常。

我正在通过Visual Studio 2017中的IIS Express运行它。

    [BotAuthentication, TenantFilter]
public class MessagesController : ApiController
{
    static string AppID = ConfigurationManager.AppSettings["MicrosoftAppId"];
    static string AppPassword = ConfigurationManager.AppSettings["MicrosoftAppPassword"];

    [HttpPost]
    public async Task<HttpResponseMessage> Post([FromBody] Activity activity)
    {
        using (var connector = new ConnectorClient(new Uri(activity.ServiceUrl)))
        {
            var members = await connector.Conversations.GetConversationMembersAsync(activity.Conversation.Id);
  

System.UnauthorizedAccessException     HResult = 0x80070005     消息=对Microsoft App ID XXX的授权失败,状态码为禁止,原因短语为“禁止”     源= Microsoft.Bot.Connector     堆栈跟踪:      在Microsoft.Bot.Connector.JwtTokenRefresher.d__2.MoveNext()      在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)      在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)      在System.Net.Http.HttpClient.d__58.MoveNext()      在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)      在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)      在System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(任务任务)      在Microsoft.Bot.Connector.Conversations.d__10.MoveNext()      在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)      在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)      在Microsoft.Bot.Connector.ConversationsExtensions.d__11.MoveNext()      在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)      在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)      在System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()      在C:\ Users \ xxxx \ source \ repos \ NewApp \ NewApp \ NewApp \ Controllers \ MessagesController.cs:line 25

中的NewApp.Controllers.MessagesController.d__2.MoveNext()      

内部异常1:   HttpRequestException:响应状态代码未指示成功:403(禁止)。

我在这里发现了类似的问题:Authorization for Microsoft App ID xxx failed with status code Forbidden and reason phrase 'Forbidden'。但这不是专门为Microsoft Teams设计的。 connector->凭据-> OAuthScope显示“ api.botframework.com/.default”,但我认为这对团队是正确的。

我的MicrosoftAppId和MicrosoftAppPassword是正确的。如果我注释掉[BotAuthentication,TenantFilter],则会收到401未经授权的异常。如果我用GetConversationMembersAsync注释掉该行,则该应用程序有效。

我正在按照此处的说明尝试获取此上下文信息:https://docs.microsoft.com/en-us/microsoftteams/platform/concepts/bots/bots-context

1 个答案:

答案 0 :(得分:0)

我知道这是一个古老的问题,但是我遇到了同样的问题并找到了解决方案,以防万一。您需要确定并添加MicrosoftAppCredentials.TrustServiceUrl(serviceURL);,如下所示:

using (var connector = new ConnectorClient(new Uri(activity.ServiceUrl)))
{
    // the line below is the new required item
    MicrosoftAppCredentials.TrustServiceUrl(serviceURL);

    var members = await connector.Conversations.GetConversationMembersAsync(activity.Conversation.Id);

...