Botframework-solutions: [文档] 创建有关如何直接将身份验证添加到 VA 而不是依赖技能的 HowTo 文档

创建于 2019-07-12  ·  17评论  ·  资料来源: microsoft/botframework-solutions

您的功能请求是否与问题有关? 请描述。

虽然模板生成了图形 api 的代码,但没有一个简单的示例或过程来测试全新生成的虚拟助手的身份验证,然后使用此 api。

您正在寻找什么解决方案?

在 typescript 中生成虚拟助手的 yeoman 源代码之后,启用图形客户端请求身份验证激活的过程、示例或配置,以及在 typescript 中部署本地技能的示例方法。

您考虑过哪些替代方案?

开发打字稿的新技能并使用botskills connect工具尝试查看虚拟助手解决方案的更改并查看代码部分的更改。

您可以提供任何其他上下文吗?

生成的全新技能与原始虚拟辅助生成器的源代码相似且大部分。 对于一些简单的部署场景,仅仅为整个虚拟助手的一部分功能创建一个全新的机器人解决方案是不切实际的(即:当请求的负载没有意义时)。 因此,有一些botskills工具的参数描述来识别本地清单,但不存在使用本地技能的真正的打字稿示例,也不存在在打字稿中要求 oauth 凭据的技能示例。

所有17条评论

@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,你介意告诉我们我如何重新打开这个问题

那是因为:

  • 您的回复间接转发到问题中已经提到的PROGRAMATIC WAY
  • 因此,您没有使用 VA 在技能中使用的身份验证机制:您正在构建一个新机制。
  • 它在打字稿中进行了测试,但不起作用:(1:进行bot-registration的配置,然后2:添加具有graph api权限的aad服务提供者注册,以及3:将bot-registration与之前的aad-registration相关联步骤和 4:添加 appsettings 配置)。 实际上,VA 仍在按照 [指示的手动步骤] 进行验证而无需身份验证
    (https://github.com/microsoft/botframework-solutions/blob/next/docs/reference/skills/manualauthsteps.md)。
  • 我不想使用一项技能,因为这是为不打算使用其他预构建元素的机器人支付的额外费用; 我只想启用助手对 azure AD 进行身份验证。 据我所知,当您创建新技能时,您可以激活身份验证; 为什么不记录此策略以启用本地身份验证方案?或者请澄清您是否只能使用编程方式将身份验证添加到虚拟助手。 谢谢

将身份验证直接添加到 VA 的步骤应该与将它们添加到文档中列出的技能的步骤相同(因此我向您指出了它。)

我想确认您正在对 VA Bot 注册和 VA 应用程序注册进行所有这些更改,对吗?

您可以在设置选项卡中进入机器人注册,然后选择您的 OAuth 连接并单击顶部的“测试连接”并告诉我它说什么吗? 谢谢。

是的; 一切按程序进行。 请参阅下面的执行步骤:

复制步骤/虚拟助手

安装运行 VA 脚手架的所有要求:

先决条件

npm uninstall -g yo
npm install -g yo
  • 窗口构建工具
npm install -g windows-build-tools
  • npm(如果需要更新)
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

复制/认证的步骤

  • 创建 azure 广告注册
$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 权限

  • 为:微软图
  • 类型:委托权限
  • 权限:(ya esta User.Read):
profile
Mail.Read
Mail.Send
User.Read
User.ReadBasic.All

  • 添加隐式授权,用于 id 令牌 ([] AccessToken o [x] IDToken)
  • 记录前一个过程的key
  • 目录(租户)ID:(app-registration/overview)
  • 应用程序(客户端)ID:(应用程序注册/概述)
  • 客户秘密:

  • 使用上一步的thinfo更新botchannels-registration中的oauth生成

    • 名称(连接名称):Outlook
    • 服务提供者:Azure Active Directory v2
    • 客户编号:
    • 客户秘密:
    • 租户编号:
    • 范围:
  • 然后测试连接
    (它要求 oauth 声明)然后显示令牌

您的虚拟助手项目似乎已设置身份验证。 您缺少什么需要我们的帮助?

尽管进行了配置,但该项目从不要求使用 VA 对用户进行身份验证。 我已经为项目添加了身份验证,但它永远不会激活用于身份验证的对话框。 我已经为项目添加了身份验证,但它从未激活身份验证对话框

根据在 kudu 中看到的文档和错误在应用程序中进行的其他步骤:

重现/认证-应用程序更改的步骤

  • 在 appsettings.json 文件中添加 oauth 配置,指向前面步骤中声明的 oauth 策略。 如果您以前在本地模式下工作过,请恢复 msAppId amd 密码。
{
  "oauthConnections": [
    {
      "name": "Outlook",
      "provider": "Azure Active Directory v2"
    }
  ], ...
  • 修改 package.json 以区分 azure run 操作的本地运行或根据需要修改 web.config 文件以在 azure 中成功部署。
  "local:start": "npm run build && node ./lib/index.js NODE_ENV=development",
  "start": "node ./lib/index.js",
  • 在 azure 中发布应用解决方案
npm run clean
npm run build
.\deployment\scripts\publish.ps1 -name <VA_NAME> -resourceGroup <VA_NAME>
  • 使用 botframework 模拟器创建连接以使用 msAppId 和 msPwd 测试身份验证

要提示进行身份验证,您需要将 OAuthPrompt 添加到对话框中所需位置,并在配置时提供连接信息。

Microsoft/botbuilder-samples repo 中的这个示例对话框应该会有所帮助: https ://github.com/microsoft/BotBuilder-Samples/blob/master/samples/javascript_nodejs/18.bot-authentication/dialogs/mainDialog.js

这是一个很好的说明,因为该方法确实不会向您的机器人添加身份验证,您必须执行一些额外的步骤来保护您的操作:

  • 这意味着我必须在我希望的每个步骤中手动调用 oauthPrompt。

一些额外的问题:

  • 如何重用用户先前身份验证的令牌?
  • 是否存在遍历策略或模式来添加之前的身份验证以执行对认知服务的任何调用? (以前的版本似乎有一个 authenticationMiddleware 但我在 v4 中没有看到类似的东西)
  • 这是否意味着已经创建的与 index.ts 的 buildAuthDialog 方法中的技能一起使用的MultiProviderAuthDialog不用于任何目的。
  1. 如果用户已经在其他地方登录该 OAuth 连接,OAuthPrompt 将自动检索用户的令牌。 如果您将 OAuthPrompt 添加到您想要的位置,并且用户已经登录,它将继续下一步。

  2. 我不确定你在这里问什么。 您不需要用户进行身份验证即可使用认知服务(LUIS、QnA 等)。 您只需要该服务的密钥。 请为我澄清这个问题。

  3. 启动时的 MultiProviderAuthDialog 注册仅为您的 Skills.json 配置中配置的技能创建。 如果没有技能,则不会使用。

2:我的意思是:如果存在(不知道是否已经存在或计划中)一个中间件在访问执行maindialog请求逻辑之前向用户询问身份验证凭据,所以你可以让这个逻辑完好无损

我认为我已经根据您的评论找到了解决方案:

  • 创建一个对话框(此处为:LoginActivityDialog),用于保存登录提示逻辑。 它从设置中接收oauth-connections的信息,但其逻辑类似于引用的示例。 也继承自LogoutDialog
  • 创建一种断路器对话框:两个步骤的瀑布对话框:身份验证步骤和主要步骤。 第一步调用 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 更适合一般机器人建议。

此页面是否有帮助?
0 / 5 - 0 等级