虽然模板生成了图形 api 的代码,但没有一个简单的示例或过程来测试全新生成的虚拟助手的身份验证,然后使用此 api。
在 typescript 中生成虚拟助手的 yeoman 源代码之后,启用图形客户端请求身份验证激活的过程、示例或配置,以及在 typescript 中部署本地技能的示例方法。
开发打字稿的新技能并使用botskills connect
工具尝试查看虚拟助手解决方案的更改并查看代码部分的更改。
生成的全新技能与原始虚拟辅助生成器的源代码相似且大部分。 对于一些简单的部署场景,仅仅为整个虚拟助手的一部分功能创建一个全新的机器人解决方案是不切实际的(即:当请求的负载没有意义时)。 因此,有一些botskills
工具的参数描述来识别本地清单,但不存在使用本地技能的真正的打字稿示例,也不存在在打字稿中要求 oauth 凭据的技能示例。
@andhdo在调用图表之前显示如何使用虚拟助手并添加身份验证步骤的文档页面是否足以满足您的需求? 这还包括创建身份验证连接所需的手动配置步骤吗?
是的,这可能是一个初始起点,就像基本的身份验证示例一样。 那么它可能是本地打字稿技能开发启用和禁用身份验证的一个很好的补充。
好的 - 有道理 - 我将更新此工作项并在下周为此更新文档。 它出现了几次,因为您说纯粹在 VA 内进行身份验证而不依赖于技能在某些情况下是有用的。
这里涵盖了基础,我将重点放在 VA 上(它会比这简单得多)
https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-authentication?view=azure-bot-service-4.0&tabs=aadv1%2Ccsharp%2Cbot-oauth
是的; 我已经进行了运行这个场景的练习,但我的想法是在虚拟助手中实现它的最佳方式,而不重复微软已经制作的代码。
感谢您的帮助,并希望看到结果。
嗨@andhdo ,这个文档应该涵盖您需要的内容: https ://github.com/microsoft/botframework-solutions/blob/next/docs/reference/skills/manualauthsteps.md
如果需要,重新打开。
嗨@andhdo ,这个文档应该涵盖您需要的内容: https ://github.com/microsoft/botframework-solutions/blob/next/docs/reference/skills/manualauthsteps.md
如果需要,重新打开。
嗨@lauren-mills,你介意告诉我们我如何重新打开这个问题?
那是因为:
将身份验证直接添加到 VA 的步骤应该与将它们添加到文档中列出的技能的步骤相同(因此我向您指出了它。)
我想确认您正在对 VA Bot 注册和 VA 应用程序注册进行所有这些更改,对吗?
您可以在设置选项卡中进入机器人注册,然后选择您的 OAuth 连接并单击顶部的“测试连接”并告诉我它说什么吗? 谢谢。
是的; 一切按程序进行。 请参阅下面的执行步骤:
安装运行 VA 脚手架的所有要求:
npm uninstall -g yo
npm install -g yo
npm install -g windows-build-tools
npm install -g npm
npm install -g botdispatch
npm install -g ludown luis-apis qnamaker [email protected]
npm install -g chatdown
npm install -g botskills
npm uninstall -g generator-botbuilder-assistant
# select the following line according release or development versions you want to run. see https://github.com/microsoft/botframework-solutions#user-content-js table for versions
npm install -g generator-botbuilder-assistant
yo botbuilder-assistant --assistantName "bot-1835" --assistantDesc "my assistant" --assistantLang "es,en" --assistantGenerationPath "." --noPrompt
然后生成开始并在它之后立即构建过程。
然后更正问题,如果需要运行应用程序在本地运行
-> index.ts:在开发、主版本中省略凭据参数return new MultiProviderAuthDialog(oauthConnections)
;
-> index.ts:在开发中将skill.msaAppId
更改为skill.msAppId
,主版本
-> 将 msAppId 和属性添加到 Skills.json 文件中。
-> 忽略由 bot-builder-tools(管理认知模型)在构建过程中自动生成的资源
在 azure 中配置组件:
注意您没有任何与作为代码提供的冲突的组件(使用控制台或命令行工具删除具有相同标识符的先前资源组、azure-ad-registrations 和 luis.ai 模型)。
首先,你需要建立与azure的连接,并选择一个有钱的订阅(因为在az里都是钱)
az login
az account set --subscription <SUBSCRIPTION_TO_WORK>
然后执行生成的脚本
cd bot-1835
.\deployment\scripts\deploy.ps1 -languages "es-es" -name "<VA_NAME>" -location "westus" -appPassword "<VA_PASS>" -luisAuthoringRegion "westus" -luisAuthoringKey "<LUIS_AUTHORING_KEY>" -parametersFile ".\deployment\resources\parameters.template.json" -debug
VA_NAME:
VA_PASS:
LUIS_AUTHORING_KEY:来自
在那之后(并祈祷一切都成功),然后您可以开始降低订阅昂贵的资源级别
输出看起来像这样:
> Creating resource group ...
> Validating Azure deployment ...
> Deploying Azure services (this could take a while)...
> Updating appsettings.json ...
> Deploying cognitive models ...
> Initializing dispatch model ...
> Parsing general LU file ...
> Deploying general LUIS app ...
> Setting LUIS subscription key ...
> Adding general app to dispatch model ...
> Parsing chitchat LU file ...
> Deploying chitchat QnA kb ...
> Adding chitchat kb to dispatch model ...
> Parsing faq LU file ...
> Deploying faq QnA kb ...
> Adding faq kb to dispatch model ...
> Creating dispatch model...
> Setting LUIS subscription key ...
+ To publish your bot, run 'C:\MyPathToDir\bot-1835\deployment\scripts\publish.ps1 -name 1835-dev1 -resourceGroup 1835-dev1 -projFolder "C:\MyPathToDir\bot-1835\src '
> Done.
npm run start
$appReg2 = (az ad app create --display-name "<VA_AZADREG_NAME>" --password "<VA_AZADREG_PASS>" --available-to-other-tenants false --reply-urls "https://token.botframework.com/.auth/web/redirect")
$appReg2json = ($appReg2 | ConvertFrom-Json)
VA_AZADREG_NAME=
VA_AZADREG_PASS=
然后添加图形 api 权限
profile
Mail.Read
Mail.Send
User.Read
User.ReadBasic.All
和
客户秘密:
使用上一步的thinfo更新botchannels-registration中的oauth生成
然后测试连接
(它要求 oauth 声明)然后显示令牌
您的虚拟助手项目似乎已设置身份验证。 您缺少什么需要我们的帮助?
尽管进行了配置,但该项目从不要求使用 VA 对用户进行身份验证。 我已经为项目添加了身份验证,但它永远不会激活用于身份验证的对话框。 我已经为项目添加了身份验证,但它从未激活身份验证对话框
根据在 kudu 中看到的文档和错误在应用程序中进行的其他步骤:
{
"oauthConnections": [
{
"name": "Outlook",
"provider": "Azure Active Directory v2"
}
], ...
"local:start": "npm run build && node ./lib/index.js NODE_ENV=development",
"start": "node ./lib/index.js",
npm run clean
npm run build
.\deployment\scripts\publish.ps1 -name <VA_NAME> -resourceGroup <VA_NAME>
要提示进行身份验证,您需要将 OAuthPrompt 添加到对话框中所需位置,并在配置时提供连接信息。
Microsoft/botbuilder-samples repo 中的这个示例对话框应该会有所帮助: https ://github.com/microsoft/BotBuilder-Samples/blob/master/samples/javascript_nodejs/18.bot-authentication/dialogs/mainDialog.js
这是一个很好的说明,因为该方法确实不会向您的机器人添加身份验证,您必须执行一些额外的步骤来保护您的操作:
一些额外的问题:
MultiProviderAuthDialog
不用于任何目的。如果用户已经在其他地方登录该 OAuth 连接,OAuthPrompt 将自动检索用户的令牌。 如果您将 OAuthPrompt 添加到您想要的位置,并且用户已经登录,它将继续下一步。
我不确定你在这里问什么。 您不需要用户进行身份验证即可使用认知服务(LUIS、QnA 等)。 您只需要该服务的密钥。 请为我澄清这个问题。
启动时的 MultiProviderAuthDialog 注册仅为您的 Skills.json 配置中配置的技能创建。 如果没有技能,则不会使用。
2:我的意思是:如果存在(不知道是否已经存在或计划中)一个中间件在访问执行maindialog请求逻辑之前向用户询问身份验证凭据,所以你可以让这个逻辑完好无损
我认为我已经根据您的评论找到了解决方案:
创建一种断路器对话框:两个步骤的瀑布对话框:身份验证步骤和主要步骤。 第一步调用 loginActivityDialog 和第二步,仅当 oauthPrompt 已生成令牌时才调用先前生成的主对话框。
在 index.ts 中执行类似于buildAuthDialog
逻辑的操作,以从设置中获取 oauthConnection 配置并绕过LoginActivityDialog
/* eslint-disable */
function buildAuthDialog2(settings: Partial<IBotSettings>): LoginActivityDialog|undefined {
const oauthConnections: IOAuthConnection[] | undefined = botSettings.oauthConnections;
if(oauthConnections!==undefined) {
const loginDialog = new LoginActivityDialog(oauthConnections);
console.log(`created`);
return loginDialog;
} else {
throw new Error(`You must configure at least one supported OAuth connection to use authentication`);
}
return undefined;
};
/* eslint-enable */
这是迄今为止我发现的侵入性较小的方法; 但是它缺少两件事:(1)如果需要,它不能传播令牌来调用图。 (2) 这不是我想的原来的中间件
很高兴听到您能够让提示正常工作。 要访问令牌,它应该在 stepContext.Result 中的下一步(在 OAuthPrompt 之后)可用。
如果您想获得有关创建所需中间件的一些建议,我建议您访问我们的Stack Overflow ,因为它比这个 repo 更适合一般机器人建议。