TypeScript 虚拟助手和技能
打字稿
尝试身份验证时抛出以下错误
错误:DialogContext.beginDialog():未找到 ID 为“AuthPrompt”的对话框。
在 WaterfallStepContext。
在 Generator.next (
在 D:\home\site\wwwroot\node_modules\botbuilder-dialogs\lib\dialogContext.js:7:71
在新的承诺(
在 __awaiter (D:\home\site\wwwroot\node_modules\botbuilder-dialogs\lib\dialogContext.js:3:12)
在 WaterfallStepContext.beginDialog (D:\home\site\wwwroot\node_modules\botbuilder-dialogs\lib\dialogContext.js:119:16)
在 MultiProviderAuthDialog.firstStep (D:\home\site\wwwroot\node_modules\bot-solutions\lib\authentication\multiProviderAuthDialog.js:75:34)
在 WaterfallDialog。
在 Generator.next (
在 D:\home\site\wwwroot\node_modules\botbuilder-dialogs\lib\waterfallDialog.js:7:71
部署虚拟助手和技能。 在技能中启用 MultiProviderAuthDialog
使用身份验证对话框通过 Azure Active Directory v2 进行身份验证
接收登录卡以登录
错误:DialogContext.beginDialog():未找到 ID 为“AuthPrompt”的对话框。
在 WaterfallStepContext。
在 Generator.next (
在 D:\home\site\wwwroot\node_modules\botbuilder-dialogs\lib\dialogContext.js:7:71
在新的承诺(
在 __awaiter (D:\home\site\wwwroot\node_modules\botbuilder-dialogs\lib\dialogContext.js:3:12)
在 WaterfallStepContext.beginDialog (D:\home\site\wwwroot\node_modules\botbuilder-dialogs\lib\dialogContext.js:119:16)
在 MultiProviderAuthDialog.firstStep (D:\home\site\wwwroot\node_modules\bot-solutions\lib\authentication\multiProviderAuthDialog.js:75:34)
在 WaterfallDialog。
在 Generator.next (
在 D:\home\site\wwwroot\node_modules\botbuilder-dialogs\lib\waterfallDialog.js:7:71
感谢@tomSauret847报告此问题! 一旦有任何更新,我们会尽快回复您😊。
嗨@tomSauret847 - 很抱歉延迟。 我们已按照以下步骤使用 TypeScript Skill 成功重现了该问题:
OAuthPromptSettings
数组传递给MultiProviderAuthDialog
构造函数appsettings.oauthConnections
的性质的botSettings
AADv2
连接AADv2
连接到 Azure 中的注册一旦有任何更新,我们会尽快回复您😊。
嗨@tomSauret847 - 我们已经在这个提交中修复了这个问题。
这实际上是bot-solutions
库中的一个问题,我们已安排将修复程序与库的1.0版一起发布。
同时,如果您想自己测试修复程序,可以按照以下步骤操作:
npm install
以安装其依赖项。npm run build
以构建解决方案。npm pack
生成.tgz
文件。 它应该在同一位置创建一个文件,名为 bot-solutions-version.tgz"bot-solutions": "^1.0.0"
替换为"bot-solutions": "<PATH_TO_TGZ>"
我们会留意您的回复😊。
感谢您调查此@Batta32我仍然收到有关此过程的错误。 错误是
错误:找不到名称为 {connection name} 的连接设置
我正在按照此处概述的方式设置连接,以便为技能设置 SSO。
我们是否仍然需要在每个技能中使用打字稿技能进行身份验证连接?
或者我们是否可以像为 C# 技能概述的那样使用单个 SSO?
如果我在技能上添加连接,我将像您一样收到登录提示,但在完成登录后我不会收到令牌。如果您能说明我们是否需要在 VA 中设置单个连接,或者我们需要在每个需要身份验证的技能中建立连接。
感谢@tomSauret847的回复。 如有任何更新,我们会尽快回复您😊!
嗨@tomSauret847 - 我们已成功重现该问题。 这是因为name
财产oauthConnections
的的appsettings.json
不同的connectionName
在属性OAuthPromptSettings
您正在使用。
我们将继续对此进行审查并分析您在上面提到的问题。 一旦有任何更新,我们会尽快回复您😊。
我们重现问题的步骤是:
name
的oauthConnections
中的appsettings.json
connectionName
属性是否与您正在使用的OAuthPromptSettings
的connectionName
属性不同_connectionName和name不同时,问题重现_
_问题转载_
嗨@tomSauret847
我们是否仍然需要在每个技能中使用打字稿技能进行身份验证连接?
在 TypeScript Skill 1.0版本发布之前,您需要在每个 TypeScript Skill 中都有一个身份验证连接。
或者我们是否可以像为 C# 技能概述的那样使用单个 SSO?
由于 TypeScript 1.0 版尚未发布,因此无法使用 TypeScript 的 SSO,因为它已针对 C# 技能进行了概述。
如果这些对您有帮助,请告诉我们😊。
@ tomSauret847 -错误Error: Could not find Connection Setting with name {connection name}
是因为name
在属性oauthConnections
所述的appsettings
不同到connectionName
属性在OAuthPromptSettings
您正在使用的
要解决这个问题,您必须检查两个属性是否相等。
有关更多信息,您可以查看上面的评论。
感谢@Batta32 对此进行调查。 我可以确认,如果我在技能上创建连接属性,我可以获得登录提示。 你的评论提出了另一个问题。 我们正准备用我们的新 VA 进行测试,然后进入生产阶段。 我的问题,
此身份验证修复程序是否会在 1.0 版本之前发布到 NPM?
对于我们的生产环境,我们需要发布 NPM 包,因此我们需要发布此修复程序,然后才能将此 VA 移入生产环境。 我会留意你的回答。
@tomSauret847 - 感谢您的回复! 我们将在 TypeScript 1.0 版的 PR 中添加这些修复:
[TypeScript][Bot-Solutions] Implement changes in Bot-Solutions to 1.0 release
[TypeScript][Virtual Assistant] Implement changes in Virtual Assistant to 1.0 release
[TypeScript][Skill] Implement changes in Skill to 1.0 release
一旦我们有任何更新,我们会立即通知您。 同时,我们正在努力验证 TypeScript 中的身份验证过程。
@tomSauret847 - 我们发现了另一个问题,即在身份验证过程中技能状态变量为 _undefined_。
我们以 PR #3561 为指导,它为我们在此提交中合并的技能状态访问器设置了默认值。
应用这些更改后,身份验证过程将正常工作。 合并 TypeScript v1.0 后,将立即修复此问题。
这是我们使用此分支的环境: feature/southworks/test-fix-auth-skill
:
同时,如果您想自己测试修复程序,可以按照以下步骤操作:
npm install
以安装其依赖项。npm run build
以构建解决方案。npm pack
以生成 .tgz 文件。 它应该在同一位置创建一个文件,名为 bot-solutions-version.tgz"bot-solutions": "^1.0.0"
替换为"bot-solutions": "<PATH_TO_TGZ>"
npm install
以安装其依赖项。npm run build
以构建解决方案。我们非常关注您的回答。 😊
_SkillState 变量获得未定义的值_
_身份验证过程正常工作_
再次感谢@Batta32! 我确实使用1.0包进行测试。 我仍然需要在技能中保留连接设置,但我能够使身份验证工作。 我能够看到 VA 在哪里接收令牌响应并将其转发给技能进行处理。
@Batta32我们在 2 项技能中设置了身份验证,并且在 Teams 频道中运行良好。 直线通道未通过身份验证提示。 成功登录后,该技能未收到令牌。 此问题仅存在于我们的直拨渠道中。 我们正在使用提供的示例直接线路客户端并启用了增强的身份验证选项,因此我们不输入“魔术代码”。 它在添加增强型身份验证之前工作,但在添加此功能后,该技能不再接收令牌响应。 如果我们取消技能并返回该对话框,则会出现令牌,我们可以完成该对话框。 如果您对可能导致这种情况的原因有任何想法,请告诉我。
感谢@tomSauret847 ,我们将审核该场景,我们会尽快回复您!
开始回顾场景:
非常感谢@tomSauret847 ,我们将对此进行审查,我们会在此处通知您任何更新😊!
嗨@tomSauret847 ,我们无法重现此问题,因为我们的身份验证方案正常工作。
我们为您提出了一些问题:
这是我们一直在使用的设置:
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"BotName": "skillbot-name",
"DirectLineSecret": "XXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"EnableDirectLineEnhancedAuthentication": true,
"SpeechServiceRegionIdentifier": "",
"SpeechServiceSubscriptionKey": ""
}
我们遵循的步骤是:
我们会留意您的回答。
感谢@matiasroldan6 对此进行调查。 回答您的问题
我们确实在直线客户端中将用户 ID 设置为“dl_xxxx”
我们在技能和 VA 上的连接中有 Azure AD v2 身份验证
我们将直接线路客户端的 appsettings.json 设置为与上面相同
我们无法在技能上使用直线通道,只能在 VA 上使用
我们能够在 Teams 频道中使用身份验证,唯一的问题是对话消息乱序。 直到转换的一分钟后才发送第一个 stepContext.context.sendActivity('message') 失败。 这仅发生在包含身份验证的对话框和团队频道中。
我们正在使用位于此处的 bot-solutions 1.0
如果您需要有关技能和 VA 的更多信息,请告诉我
嗨@tomSauret847 ,我们可以重现此问题的发生。
在我们的场景中,问题在于 Directline 通道中设置的可信源地址。 例如,Directline 弹出窗口指出可信来源需要是_https_,或 _http_ 用于 _localhost_。 这将解释 Directline 是唯一对您失败的渠道。
要检查这是否也是您的问题,您可以尝试将其设置为可信来源:
您的机器人地址(如果您在本地调试,则为 https://xxxxx.azurewebsites.net 或 https://xxxx.ngrok.io)
如果需要,您的本地主机,如http://localhost
重现这一点的设置是:
我们的重现步骤是:
请让我们知道这是否有帮助。 我们会留意您的回复。
感谢@matiasroldan6 对此进行调查。 您在上面显示的设置与我们使用的设置相同。 我们删除了 localhost 路由,只在直接线路通道 (https://xxxxx.azurewebsites.net) 的受信任源中包含机器人地址。 该技能在登录提示后仍然没有响应,如果我们取消对话并再次调用该技能,它将拥有令牌并继续对话。 用户登录后,我们仍然无法获得接收令牌的技能。
感谢您的回复@tomSauret847 - 我们将继续努力寻找解决此问题的方法😊。
考虑到 bot-solutions (PR #3583) 的 1.0 版,我们有问题以了解您如何使用azurewebsites.net
端点:
Messaging endpoint
?.tgz
包。 这样对吗?谢谢@Batta32
感谢@tomSauret847 ,我们将使用您提供的新信息继续审查此问题! 一旦有任何更新,我们会尽快回复您😊。
嗨@tomSauret847 ,我们成功重现了此问题的发生。
我们从您之前的回复中注意到的一件事是,您正在使用机器人 URL 作为受信任的来源。
根据此评论和此文档,您应该拥有聊天客户端的 URL。
我们的设置是:
脚步:
正如我们确认的那样,我们将继续审查这个问题,正如你提到的,这在 Microsoft Teams 和模拟器中是有效的。
嗨@tomSauret847 ,我们使用增强型身份验证成功执行了身份验证过程。
我们提出了一些问题,以便您可以查看我们的信息:
<WEB_APP_BOT_NAME>
替换为您的机器人资源的名称? 检查您是否有node_modules
、 lib
和其他文件夹。这是我们的环境:
我们遵循以下步骤:
.tgz
文件"bot-solutions": ".//TGZ//bot-solutions-1.0.0.tgz"
deploy.ps1
部署机器人publish.ps1
脚本发布两个示例run sample dialog
触发身份验证最后但并非最不重要的一点是,我们使用 C# 机器人确认了相同的步骤,并检查它是否也能正常工作。
我们会留意您的回复😊
_增强认证的配置_
_使用增强型身份验证和 TypeScript 机器人的成功通信_
_使用增强型身份验证和 C# bots 成功通信_
谢谢@VictorGrycuk。 很抱歉我们需要设置测试实例来验证修复程序的延迟响应。 我们已经能够在测试实例中进行身份验证,并缩小了问题的范围。
对于我们的 VA /Skills 实例,我们将它们放在带有防火墙的应用程序网关后面。 这似乎是增强型身份验证不起作用的原因。 当我们在该配置之外的 VA 和技能上实施此功能时,它可以正常工作。 应用程序网关将另一台主机混合在一起,我们认为这就是阻止令牌的原因。 所以我们有以下问题,
有没有办法让增强的身份验证与应用程序网关后面的机器人一起工作?
伟大的@tomSauret847! 我们将进行一项研究和一些测试,以审查一种使用应用程序网关后面的机器人来增强身份验证的方法。
一旦我们有任何更新,我们会在这里通知您😊。
嗨@tomSauret847 ,我们做了一些研究,并提出了一些问题。
我们会留意您的回答🙂
感谢您回复@VictorGrycuk这里是我们问题的答案,
我们正在使用部署到 Azure 的机器人进行测试。 我们无法创建隧道进行本地测试。
是的,我们正在使用带有 WAF 的 Azure 应用程序网关,如您的链接中所述
这些是 TypeScript 机器人(VA 和 2 项具有身份验证的技能),我们仅使用 1 个 C# 技能来解决同步循环问题,并且其中没有身份验证。
嗨@tomSauret847 ,抱歉延迟 - 我们认为应该可以将增强型身份验证与背后有机器人的 Azure 应用程序网关一起使用。
几个额外的问题:
组件:
配置:
我们将努力复制这个场景。
谢谢@VictorGrycuk你的问题的答案是
您可以使用网关的公共 IP 通过模拟器连接到虚拟助手吗? 在我们的测试中,我们确认这是可能的
您能否在不增强沟通的情况下通过 VA 与技能进行联系和沟通?
@tomSauret847 ,您好,我们可以确认增强型身份验证确实适用于 Azure 应用程序网关背后的机器人。
我们创建了 PR #3694 ,其中包含有关如何使用已部署的机器人配置 Azure 应用程序网关的新文档。
我们按照以下步骤进行了测试:
由于这似乎是 Azure 应用程序网关的配置问题,我建议您在https://stackoverflow.com/questions/tagged/botframework 中询问建议; 如果你没事,我们可以关闭这个问题🙂。
谢谢@VictorGrycuk我们将处理您发布的信息。 我确实注意到此链接已损坏。
感谢@tomSauret847 ,一旦文档合并到master
分支,该链接将导致使用 TypeScript bot (以及此图像)配置网关的健康探测器,因为文档使用{{site.baseurl}}
生成 URL。
@peterinnesmsft - 由于不活动,我们可以关闭该问题。 @tomSauret847如果您仍然遇到问题,请随时重新激活,我们可以再次解决这个问题,或者创建一个新问题!
另外,如果您有任何问题,请在https://stackoverflow.com/questions/tagged/botframework 中提问
为 TypeScript 1.0 版合并以下 PR 后,整个身份验证过程将得到解决:
[TypeScript][Bot-Solutions] Implement changes in Bot-Solutions to 1.0 release
[TypeScript][Virtual Assistant] Implement changes in Virtual Assistant to 1.0 release
[TypeScript][Skill] Implement changes in Skill to 1.0 release
感谢@Batta32在这方面的帮助。 我们不得不暂时搁置这个部分,所以我会关闭这个问题,如果我们再次拿起它时有问题,我会重新打开它。
@Batta32我们有一个关于这个问题的快速问题。 打字稿的 SSO 是否可用? 我们发现问题是我们的技能在防火墙后面,无法接收令牌响应。 当我们传递 VA 的凭据时,它不会将令牌转发给技能,它只是重新启动对话。 如果打字稿的 SSO 不可用,您预计什么时候可用? 感谢您在此问题上的所有帮助。
嗨@tomSauret847 ,SSO 目前不适用于 TypeScript,因为它是在 1.0 版本中引入的。 应该批准并合并 TypeScript 1.0 版的 PR,以便发布具有该功能的新版本。
有任何更新我们会第一时间通知您😊。
最有用的评论
再次感谢@Batta32! 我确实使用1.0包进行测试。 我仍然需要在技能中保留连接设置,但我能够使身份验证工作。 我能够看到 VA 在哪里接收令牌响应并将其转发给技能进行处理。