【问题标题】:GetConversationMembersAsync returning 403 (Forbidden)GetConversationMembersAsync 返回 403(禁止)
【发布时间】:2018-12-19 03:26:23
【问题描述】:

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

此应用正在内部使用,我正在使用电子邮件地址向 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 H结果=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\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。连接器-> 凭据->OAuthScope 显示“api.botframework.com/.default”,但我相信这对团队来说是正确的。

我的 MicrosoftAppId 和 MicrosoftAppPassword 是正确的。如果我注释掉 [BotAuthentication, TenantFilter] 我会收到 401 Unauthorized 异常。如果我用 GetConversationMembersAsync 注释掉该行,则该应用程序可以工作。

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

【问题讨论】:

  • 您是在频道还是个人聊天中尝试这个?如果是频道,那么您能否确认您是否已为您正在尝试的团队安装了该应用程序? Bot Id 或 Manifest 将有助于进一步检查。
  • 如果您正在寻找和 Id 来查询 AD,您实际上可以寻找 activity.From 字段。其中有 AADId 和显示名称。您可以使用此 AADId 查询 Active Directory。
  • 谢谢瓦吉德。现在我正试图让这个在个人聊天中发挥作用。但你是对的,看起来如果我将它添加到团队中,它确实有效,但仍然不能用于个人聊天。你知道我怎么能在个人聊天中得到这个工作吗?如果我无法正常工作,我可能最终会按照您的建议使用 AADId。

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


【解决方案1】:

我知道这是一个老问题,但我遇到了同样的问题并找到了解决方案,以防它对某人有所帮助。你需要确定并添加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);

...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-18
    • 2011-05-31
    • 2013-11-28
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多