在 Microsoft 聊天机器人中通过直线 API 发送 JWT 以对用户进行身份验证

Sending a JWT through Direct-line API to authenticate the user, in Microsoft chat bot

我需要通过直线将 JWt(访问令牌)发送到聊天机器人。我使用 React 作为前端,聊天机器人通过 botframework-webchat.

集成到前端

到目前为止,我能够通过 activity 发送访问令牌,我认为不推荐这样做。

现在,聊天机器人要求用户登录,这不太好,因为用户已经登录到应用程序。

我的第一个问题 - 是否可以通过 id 令牌对聊天机器人进行身份验证,而不是与 Azure AD、B2C 或任何身份验证服务提供商连接?

如果可能,我如何通过 botframework-webchat

将 id 令牌发送给机器人

提前致谢

这是我的前端代码

const Chatbot = (props) => {
  const language = localStorage.getItem('language');
  const directLine = useMemo(
    () => createDirectLine({ token: <my_token>, locale: 'sv-se' }),
    []
  );

  useEffect(() => {
    var activity = {
      from: {
        id: '001',
        name: 'noviral',
      },
      name: 'startConversation',
      type: 'event',
      value: 'Hi noviral!',
      locale: language === 'en' ? 'en-US' : 'sv-se',
    };
    

    directLine.postActivity(activity).subscribe(function (id) {
      if (console) {
        console.log('welcome message sent to health bot');
      }
    });

  }, []);

  return (
    <Layout className="login-layout">
      <div className="login-div">
        <div className="chatbot">
          <div className="consent-wrapper">
            <ReactWebChat
              directLine={directLine}
              userID={'001'}
              username="Noviral"
              locale={language === 'en' ? 'en-US' : 'sv-se'}
            ></ReactWebChat>
          </div>
        </div>
      </div>
    </Layout>
  );
};

export default withTranslation()(Chatbot);

通过 activity 发送令牌是可以接受的,因为通过 Direct Line 发送的活动是安全的。如果查看 24.bot-authentication-msgraph 示例,您会发现机器人执行的默认操作是发送 activity 显示用户令牌。

至于身份验证,问题似乎不是您将使用什么令牌,而是您将如何进行身份验证。如果您不使用服务提供商 + 登录,机器人将如何验证用户是谁?也就是说,有一些 SSO(单个 sign-on)选项可通过网络聊天(参见 here)获得,如果用户已经登录,则 SSO 可以选择它。您必须仔细查看它们,以确定这些选项是否满足您的需求。