保护 Web 客户端的 Botframework 中的 Direct Line Secret

Posted

技术标签:

【中文标题】保护 Web 客户端的 Botframework 中的 Direct Line Secret【英文标题】:Protect Direct Line Secret in Botframework for Web Client 【发布时间】:2018-05-20 06:24:12 【问题描述】:

我已准备好我的机器人并在 WebChat(通过在 URL 中传递 &s=SECRET) 和其他渠道中使用 Direct Line Secret。

我对使用 Direct Line ClientJS 集成前端自定义聊天应用程序感兴趣(底部链接)

在阅读了关于 Bot Framework 的文档后,我知道它可以通过两种方式完成:

    在 ClientJS 中从前端聊天应用程序传递 Direct Line 密码 从前端聊天应用程序传递令牌(但是,这需要传递 Direct Line Secret 才能第一次生成令牌)

当我为我的客户开发机器人时,他们各自的用例 需要与客户端服务器保持私密。

因此,任何拥有 Direct Line Secret 的人都可以轻松获得 Bots Logic(即不是实际代码,而是机器人对特定问题的回答),只需在 Microsoft Bot Framework 提供的 WebChat 中传递 Direct Line Secret客户端(通过在 URL 中传递 s=SECRET)

那么,基本上,我该如何向别人隐瞒这个秘密?

直线客户:https://github.com/Microsoft/BotBuilder-Samples/tree/master/Node/core-DirectLine

认证机制:https://docs.microsoft.com/en-us/bot-framework/rest-api/bot-framework-rest-direct-line-3-0-authentication

编程语言:

前端 - 带有 Typescript 的 Angular.js 后端 - Heroku 上的 Node.js

【问题讨论】:

【参考方案1】:

您需要遵循Generate a Direct Line Token 部分中所述的方法#2。这样您就不必在您的 WebChat 页面中使用该密码了。

Direct Line 令牌是可用于访问单个对话的密钥。令牌过期但可以刷新。

这样,您的客户将在每次对话的基础上使用生成的令牌,并且无需在 WebChat 页面中嵌入秘密。此外,当您使用令牌时,它会过期,因此您也有额外的安全性。

【讨论】:

感谢您的回复。如果您检查方法 #2 的代码详细信息,要生成第一个令牌,您需要在 Bearer 属性中传递 SECRET,这再次 违背了隐藏秘密的目的 方法 #2 可以从服务器端完成,您的秘密将从客户端隐藏【参考方案2】:

确实,您需要将秘密完全用于直接线路,但您可以在机器人代码中处理一些方法以避免被其他人使用。

按照以下步骤操作:

1) you can pass the domain where you want to implement with user login context.
2) login context will go in bot code and will be check server side that the user which is logged in having authorized to access or to use your chat bot.
3) Restrict your bot to that particular domain.
4) Check authentication in bot using sign in feature via card.

我希望上面的班轮会对你有所帮助。 如果您需要更多帮助,请告诉我。

【讨论】:

谢谢,Domain 在前端请求中也提供了 DirectLine Connection 对象。因此,任何人都可以获取域和机密并将其传递给 Microsoft 示例代码,在此我们可以将 URL 中的参数作为 &s=&domain= 再次开始为攻击者提供实际的服务机器人回复 您必须使用组合,而不仅仅是域。登录上下文将进入机器人代码,并将检查服务器端登录的用户是否有权访问或使用您的聊天机器人。 我同意 Manoj,但如果我正在开发公共机器人(即没有用户身份验证),此解决方案将不起作用。 那么您能帮我处理这种问题吗? 注意:仍然在公共机器人中,仅通过了解 DirectLine Secret 和域信息就公开机器人问题/答案并不好。例如。我有一个机器人的详细信息,因为它没有用户身份验证作为与之集成的商业案例。因此,我只需在 Microsoft WebChat 演示中使用 secret,就可以在没有任何代码的情况下使用该机器人。 有人可以帮忙吗?

以上是关于保护 Web 客户端的 Botframework 中的 Direct Line Secret的主要内容,如果未能解决你的问题,请参考以下文章

使用 JWT 保护用于验证客户端的 RESTful API

REST 后端的 Spring Security CSRF 保护 - 将 Synchronizer Token Pattern 传输到客户端

如何保护 Web 服务调用

关于客户端云同步到web端的问题??

Java Web如何获取客户端的Hostname?

一次可以打开的 Web 套接字客户端的数量