我正在开发消息传递扩展,并试图获取正在使用该应用程序的用户的电子邮件地址。
此应用正在内部使用,我正在使用电子邮件地址查询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。
答案 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);
...