保护 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=以上是关于保护 Web 客户端的 Botframework 中的 Direct Line Secret的主要内容,如果未能解决你的问题,请参考以下文章
REST 后端的 Spring Security CSRF 保护 - 将 Synchronizer Token Pattern 传输到客户端