c# - 获取有关谁安装了 Microsoft Teams Bot 应用的信息

标签 c# azure oauth-2.0 botframework microsoft-teams

我们使用 Microsoft Bot Framework(C# 和 Azure)构建了一个机器人应用程序,并使用 dev.botframework.com 上的 Microsoft Teams Channel 来使用侧载在 MSTeams 上启用我们的机器人,但该机器人将是一个商业机器人,因此我们需要一种方法使其仅可供我们的客户使用。

  1. 在 ms 团队上安装机器人应用程序期间,当有人安装我们的应用程序时,是否会引发任何事件,我们可以在其中 Hook 重定向 URL 或回调以接收有关“谁安装了我们的应用程序(谁安装了我们的应用程序)”的信息。用户信息、他们的团队信息、他们的公司信息等)”我遇到了一个商业应用程序 Microsoft Teams Jira Connector但不知道他们是如何将其商业化的。

  2. 安装应从我们的应用程序内启动,以便我们可以将许可、客户和团队/租户详细信息映射在一起,以便管理员代表其公司进行购买。

到目前为止我已经尝试过,

在机器人代码端,我们获取了tenant_id,因此当机器人添加/安装到 Microsoft 团队时,我一直在搜索以检索类似的信息,但我找不到太多信息.

认为 OAuth 可能会有所帮助,因为 Slack 使用它来提供对用户工作区信息的访问,我尝试过 OAuth 2.0 & v2.0 Protocols OAuth 2.0我获得了 access_token,但没有看到任何可调用的 API 来获取团队/租户信息。

编辑:如果我可以使用OAuth和API获取tenant_id或其ms团队信息,该过程将变得简单,如下

  1. 在我们的网站中,我们将要求用户单击一个按钮,以使用 OAuth 向他们的 MS 团队授予访问权限,并使用 access_token,我们将获取他们的 MS 团队信息并将其存储在映射到特定公司的端上。

  2. 当用户发送消息时,我们会要求他们单击卡中的身份验证/激活许可证按钮,如果来自用户的团队信息与我们数据库中的记录匹配,则他是有效用户,我们会激活许可证。

Microsoft Graph API 在这里有用吗?, MS teams developer API似乎正在开发中

请就此提出您的建议。

最佳答案

为了在我们的系统上没有个人用户帐户但没有概念的情况下进行身份验证。公司的许可证和管理员用户帐户。可以采用以下方法,

  1. 在我们的网站中,我们将要求公司管理员单击一个按钮,以使用 OAuth 2.0 向其 MS 团队授予访问权限,并使用检索到的 id_token(JWT token )来获取他们的权限MS 团队信息并将其存储在我们端映射到特定公司。

  2. 当用户发送消息时,我们会要求他们单击卡片中的身份验证/激活许可证按钮,如果来自用户的团队信息与我们数据库中的记录匹配,那么他就是有效用户,我们激活许可证。

Integrating with Microsoft Teams without individual user accounts

第 1 步确保我们的数据库中有客户信息(租户 ID)(这将根据来自实际机器人用户的信息进行验证 - 他们向我们的机器人发送消息时的租户 ID)

第 2 步通过租户 ID 验证并激活用户的许可证。

要执行 OAuth 2.0 流程,AuthBot示例代码可以作为引用,也可以引用OAuth 2.0 & v2.0 Protocols OAuth 2.0

当用户授予访问权限时,我们将获得一个授权代码,该代码可用于请求访问 token ,从响应中我们可以获取id_token(JWT token )并对其进行解码以检索用户信息https://jwt.io/ .

检查 OAuth 2.0 中的“成功响应”和“JWT token 声明”部分

但是,我认为没有个人用户帐户的弊大于利,因此我建议拥有个人用户帐户。在我们提出“拥有个人帐户”与“没有”的利弊后,产品所有者接受了拥有个人用户帐户。

关于c# - 获取有关谁安装了 Microsoft Teams Bot 应用的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47038382/

相关文章:

c# - Linq to Sql SelectMany

c# - 有人可以向我解释 ASP.NET MVC 吗?

azure - 为现有 AKS 群集应用节点自动缩放器时出错

ios - 我在哪里为 Swift 2 中的 NSURLSession 指定 ReloadIgnoringLocalCacheData

json - 如何从 UBER 的授权 api 获取代码

c# - Unity 插件内的 C# 脚本中未触发回调

c# - 拆分具有可变数量空格的字符串

rest - 使用 REST API 获取 Azure API 管理 SKU

c# - 获取有关 Azure 部署的更详细的错误详细信息

security - 使用 openid connect 作为多个应用程序的 SSO