【问题标题】:Can Bearer token validate Message Extension request from MS Teams?Bearer 令牌可以验证来自 MS Teams 的消息扩展请求吗?
【发布时间】:2020-07-31 10:02:15
【问题描述】:

我为 Microsoft Teams 中的一个应用程序创建了一个消息扩展程序,单击该消息扩展程序时,会将消息从 Teams 发送到我的 Web 服务。

(其中一个https://docs.microsoft.com/en-us/microsoftteams/platform/messaging-extensions/how-to/action-commands/define-action-command

我不需要对用户进行身份验证,但我想验证传入请求来自 Microsoft,而不是有人恶意向我发送数据。

Microsoft here描述的Authentication方法;在系统上单独验证用户。我不想要,因为用户可能没有帐户。

操作对我的 Web 服务的传入请求的标头中有一个 Bearer 令牌。我可以以某种方式利用它来验证它吗?

【问题讨论】:

    标签: node.js botframework microsoft-teams bearer-token


    【解决方案1】:

    您不应验证从 MS Teams 发送到您的 MS Teams 应用的 Bearer 令牌。

    正确的做法是在您的 MS Teams 应用程序和您的 Web 服务之间使用“客户端凭据授予”。此处描述了赠款:https://www.rfc-editor.org/rfc/rfc6749#section-4.4

    您的 MS Teams 应用程序将成为客户端。您的客户端向您的 Web 服务发送的每个请求都将包含由您的 Web 服务或您的 Web 服务信任的外部身份提供者颁发的令牌。此令牌将由您的 Web 服务验证,以确保请求是真实的。

    此授权适用于您描述的服务间通信。

    【讨论】:

    • 我认为这是不可能的。 MS Teams“应用程序”实际上只是一个配置 json 文件,其中提供了用于调用用户提交的操作和端点。
    • @adamjames 你说你创建了一个消息扩展?该扩展程序肯定有处理程序?
    • 扩展指向我的网络服务的 URL。在调用它时,Teams 将一组参数发送到定义的端点。我无法控制来自 Teams“应用程序”的发送。第二个链接中描述了身份验证流程,我在其中提供了一个 URL 登录 web 视图,该视图显示给 Teams 中的用户,但用户可能在我的 web 服务中没有帐户,他们应该仍然能够发送消息。所以我只是想验证消息来自团队而不是第三方。
    • @AdamJames 所以你使用预定义的参数集。在这种情况下,你可以在TeamsActivityHandler 中使用OnTeamsMessagingExtensionSubmitActionAsync(参见#51 @github.com/microsoft/BotBuilder-Samples)从你的Web 服务或外部 IDP 使用 IdentityModel (here) 并使用 HttpClient 手动将带有 Authorization 标头的请求发送到您的 Web 服务,所有这些都在您将 Web 服务配置为仅允许具有有效请求标头中的不记名令牌。
    • @AdamJames 抱歉,我刚刚看到标签 node.js。还有一个 #51 的 nodejs 示例,您基本上扩展了 TeamsActivityHandler 类并使用 handleTeamsMessagingExtensionSubmitAction 函数,您可以在其中获取 Web 服务的访问令牌并使用您喜欢的任何 http 库发送请求,访问包括令牌。它不会改变概念。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 2021-08-31
    • 2014-08-15
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 2020-09-09
    相关资源
    最近更新 更多