首页 > 解决方案 > Azure WebBot-Cortana OAUTH 问题“发布到 'https://CortanaBFChannelWestUS.azurewebsites.net

问题描述

问题:

错误:POST 到“ https://CortanaBFChannelWestUS.azurewebsites.net/v3/conversations/../activities/6TZfwIQ7Fqv ”失败:[500] Request._callback 的内部服务器错误(D:\home\site\wwwroot\node_modules\ botbuilder\lib\bots\ChatConnector.js:675:46) 在 Request.self.callback (D:\home\site\wwwroot\node_modules\request\request.js:185:22) 在 emitTwo (events.js:106 :13) 在 Request.emit (events.js:191:7) 在 Request. (D:\home\site\wwwroot\node_modules\request\request.js:1161:10) 在emitOne (events.js:96:13) 在Request.emit (events.js:188:7) 在IncomingMessage。(D:\home\site\wwwroot\node_modules\request\request.js:1083:12) 在 IncomingMessage.g (events.js:291:16) 在 emitNone (events.js:91:20)

架构: Aure Web-Bot:NodeJS SDKv3 Microsoft App Dev Luis 渠道:Web/Cortana/Skype OAuth

场景: 根据话语命中意图后,应用程序成功向用户显示“登录”卡片并要求用户登录

应用登录截图

之后,用户能够使用使用 OAuth 进行身份验证的凭据成功登录以访问 Office 365

登录后截图

TestCase: Channel Skype: 成功显示和登录 Channel Web: 成功显示和登录 Channel Cortana: Fail (没有显示“签到”卡)

频道 Cortana:失败(不显示“登录”卡)现在我在 iphone 上使用 Cortana 应用程序,对于相同的 utterance-intent-action 这就是发生的情况

屏幕截图通道 Cortana 调用

而控制台上出现的错误如上图

笔记:

在 Web-Bot 框架内 当它是 Skype 或 Web 作为通道时,OAuth 的回调被映射到

server.get('/api/OAuthCallback',
    passport.authenticate('azuread-openidconnect', { failureRedirect: '/'}),
    (req, res) => {
    const address = JSON.parse(req.query.state);
    const messageData = { accessToken: req.user.accessToken, refreshToken: req.user.refreshToken, userId: address.user.id, name: req.user.displayName};
    var continueMsg = new builder.Message().address(address).text(JSON.stringify(messageData));
    bot.receive(continueMsg.toMessage());
    res.send('Welcome ' + req.user.displayName + '. Login successful. You can close this browser window')
});

实现的 OAuth 的基本思想是 URl 映射到 Web-App-Platform 中定义的回调。

但是 Cortana 确实说Cortana MSA 身份验证并且没有用

  1. 一方面,URL 映射到https://www.bing.com/agents/oauth,而不是在 web-app-bot-url/api/OAuthCallback 中定义的回调
  2. 鉴于他们指定的拱门,有人可以解释身份验证如何为 Cortana 工作

任何人都可以阐明我所知道的问题到底是什么,就理解而言,我遗漏了一些重要的东西。

谢谢

标签: botframeworkazure-bot-serviceazureportalcortana-skills-kitcortana-invoke

解决方案


谢谢你。

Cortana 的 OAuth 与 botframework 的工作方式不同。

从应用注册开始;如果您打开 Cortana 的“为您管理身份”,如果您打开“调用时登录”,Cortana 将发送登录卡。如果 Cortana 是频道,您的机器人永远不需要将登录卡作为附件发送。您在 Cortana 通道配置页面上注册 Microsoft AAD oauth 端点,然后您的应用注册具有指向https://www.bing.com/agents/oauth的重定向 url,以让 Cortana 知道身份验证令牌是什么。

接下来,使用 Cortana 的身份验证令牌,您将在登录后的活动(消息)上获取它。使用 botframework,它保存在密钥库中,因此您需要去获取它。

如果您没有启用“调用时登录”,则发送 oauth 卡作为附件,然后 Cortana 将启动 oauth 流程,但 Cortana 仅在呈现登录请求时使用标题。

注意应用注册;重定向 url 必须来自与 oauth 流的发起者相同的域。(对于 Cortana,这就是 bing。)

如果您不想使用 Cortana 的 OAuth,请关闭“Cortana 将管理我的身份”。使用登录卡并自己管理 oauth。但是,不要忘记您还需要管理刷新令牌(如果您使用 offline_access 范围,Cortana 将为您完成)。

您可以在此处找到有关 Cortana oauth 的更多信息; https://docs.microsoft.com/en-us/cortana/skills/authentication

我在这里有一些关于差异的文件草稿; https://github.com/bw-kforce-ms/CortanaSkillsWIP/blob/master/Support/OAuth.md

让我知道这是否有帮助。


推荐阅读