繁体   English   中英

有没有办法通过 DirectLine API 和 Azure Web 应用程序使用 Oauth2 对 Microsoft Bot 框架网络聊天进行单点登录。

[英]Is there a way to do Single Sign On for the Microsoft Bot framework webchat via the DirectLine API and an Azure Web App using an Oauth2.0 abstraction

这里的想法是使用 Microsoft Bot 的实现来做一个 SPA 应用程序,它将嵌入到 Azure Web 应用程序中。 该应用程序将使用 Oauth2 openId 连接登录名,该登录名将接受其他登录名,例如 Google、GitHub、Facebook 和 Microsoft 凭据。

我知道我可以对对话进行身份验证,以在机器人的标记化中包含一个 userId。 文档在这里。

我的问题是,如果我有一个对话的登录路径,比如这里解释的。 我看到的问题是站点登录不会激活登录机器人所需的令牌,因此它可以调用其他 api 服务。 或者我可以有效地从 web 浏览器中提取令牌并将其用于我需要获取用户信息(例如 email 或登录和 hash 来访问服务)的令牌吗?

如果用户在机器人外部登录网站而不让他们再次登录机器人,我希望机器人内部具有相同的路由保护和激活。

我该怎么做才能让站点令牌对 botframework 本身起作用?

但是,如果用户在另一个频道本身 Facebook 中使用机器人,他们仍然必须通过某些对话路径登录到 go 的机器人。

我认为最好的解决方案是从我在原始问题中发布的原始博客文章中记下笔记。

所以计划是,使用这个代码。

// Generates a Direct Line token 
server.post('/directline/token', (req, res) => { 
  const options = { 
    method: 'POST', 
    uri: 'https://directline.botframework.com/v3/directline/tokens/generate', 
    headers: { 
      'Authorization': `Bearer ${process.env.directLineSecret}` 
    }, 
    json: { 
      User: { 
        Id: userId 
      } 
    } 
  }; 
  request.post(options, (error, response, body) => { 
    if (!error && response.statusCode < 300) { 
      res.send({ 
        token: body.token 
      }); 
    } else { 
      res.status(500).send('Call to retrieve token from DirectLine failed'); 
    } 
  }); 

您将从本地存储中获取 id 和用户信息,并使用它们将 id 传递到对话令牌创建中,如上面的 controller 所示。 一旦这被传递到机器人中,机器人就知道“知道”用户 ID,您现在可以使用此信息作为机器人的身份验证,然后退出而不是自己查询。 此外,此 ID 也将用于其他 api 下游调用的用户。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM