【问题标题】:Microsoft Graph/Teams-is there a way to list a user's channels using delegated permissions?Microsoft Graph/Teams - 有没有办法使用委派权限列出用户的频道?
【发布时间】:2020-08-08 04:29:05
【问题描述】:

我正在尝试将一些机器人逻辑转换为使用委派权限而不是应用程序权限,但我遇到了一个机器人功能问题,该功能可以从 1:1 对话发布到团队频道。用户可以要求机器人发布到频道,这很好,但是当我删除 Group.ReadWrite.All 时,我找不到不需要管理员同意的解决方法。这是当前的流程:

  • 获取用户加入的团队(me/joinedTeams-获取用户加入的团队。这需要Team.ReadBasic.All
  • 获取团队中的频道 (/teams/{id}/channels)。这需要 Group.Read.All(管理员同意)
  • 发布到需要 ChannelMessage.Send 的频道 (/teams/{id}/channels/{id}/messages)

因此,通过委派的非管理员权限,我可以列出用户的团队,代表他们向频道发布消息,但不能列出他们加入的团队中的频道?文档here 说您需要委托的 Group.Read.All 或 ReadWrite.All,这两者都需要管理员同意。

我是否缺少另一种方法来获取团队/频道列表以供用户交叉发布?我不想将机器人添加到频道中。我想我可以为每个频道创建/存储一个连接器列表,但这是很多额外的用户开销。挑战在于,我想将此机器人部署到拒绝向 3p 应用授予任何应用程序/管理员同意权限的组织。

【问题讨论】:

  • 要使用 Graph API 列出频道,您将需要需要上述权限的团队 ID。
  • 我可以使用 Team.ReadBasic 获取团队 ID,但即使使用团队 ID,如果没有管理员同意的权限,我也无法找到获取频道列表的方法。
  • 您需要为此 API 提供管理员同意

标签: microsoft-teams microsoft-graph-teams


【解决方案1】:

我不知道我是怎么错过的,但是有一个不需要管理员同意的 Channel.ReadBasic.All 权限。这意味着我可以在我的机器人中做这样的事情:

  • 使用 graphClient.Users[aadUserId].JoinedTeams.Request().GetAsync() 获取用户加入的团队
  • 使用 graphClient.Teams[teamID].Channels.Request().GetAsync() 获取团队的频道
  • 使用 c.Teams[teamID].Channels[channelID].Messages.Request().AddAsync(chatMessage).GetAwaiter().GetResult(); 发布到 docs 中所述的频道;

这里唯一的区别是消息归因于用户而不是机器人,但只要没问题,这是让用户发起从机器人到团队的交叉发布的一种方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多