我们计划部署一个BoT作为一种服务台来接受查询,并根据用户的文本提高支持票。我们希望将我们的BoT与我们自己的AD集成起来进行身份验证。如果AD认证不起作用,那么我们的计划-B是说我们把BoT作为一个web聊天BoT托管在我们的网页中,所有的认证都是在web应用程序中完成的。但是,我们仍然需要捕获登录到web应用程序的用户,当我们想要为他提供一些支持票时。您是否知道如何将登录的用户详细信息从宿主网页传递给BoT。托管网页可以是Azure或现场实现。
是AuthBoT是唯一的出路,使用它,用户将被重新定向到一个web应用程序进行登录,并使用神奇的代码将被认证和发送回BoT。我们是否有一种无缝的身份验证方式,而不需要将其重定向到另一个网页以进行身份验证?
我的客户不想去另一个网页输入他的凭据在这里进行认证。他想要一个更无缝的认证。在某种程度上,他是对的,因为他已经验证了自己的身份并登录到了网页中,而BoT是他网页中的另一个片段。他的观点是,为什么我们需要再次登录,为什么BoT不能从托管的网页上获取身份验证/令牌。这里有什么建议吗?
发布于 2017-02-28 22:51:57
解决你的问题有几条路可走。
因此,据我所知,当客户端使用聊天机器人小部件到达网页时,用户已经通过网页与您的网站进行了身份验证。
编辑:我添加了第三种方法,这是在网页和嵌入式WebChat框之间进行通信的首选方法.
方法1:
将用户凭据(身份验证令牌)传输到页面中的聊天机器人的一种方法是使用来自服务器的身份验证端点的凭据开始与用户进行新的对话。。。
但是,为了使其工作,需要用户的IAddress。换句话说,用户必须事先与您的机器人进行转换,而您必须将其存储在某个地方,也许存储在数据库中。
例如,下面是您的服务器代码(在NodeJS中):
//where user is sent after authenticating through web page
server.post("/authenticated", function(req, res){
//get user iaddress from database using credentials
//(you will need the Iaddress of the user to begin a dialog)
var address = getAddressFromDB(req.body.credentials)
//then use beginDialog to start a new dialog with the user you just authenticated
//(this dialog route will only be accessible from here to guarantee authentication)
bot.beginDialog(address, "/authenticated", { userAuthToken: auth_token });
//success
res.status(200);
res.end();
});
//user is sent here from the above bot.beginDialog() call
bot.dialog("/authenticated", function(session, args){
//extract credentials (auth token) from args
var authToken = args.userAuthToken;
//use auth token here.......
});然后,您将执行正常的逻辑,在bot对话框端点创建和处理支持票。如果在以后的对话框路由中需要authToken,甚至可以将它存储在session对象中。session.userData.authToken = authToken;
方法2:
另一种可以对用户进行身份验证的方法是通过聊天窗口本身通过瀑布对话框。然而,这并不能真正解决让用户进行两次身份验证的问题,但它将解决用户必须离开当前网页进行身份验证的问题。
bot将引导用户完成输入凭证的过程:
//begin user authentication here
bot.dialog("/get_username", [
function(session){
//prompt user for username here
botbuilder.Prompts.text(session, "Hello, what is your username?");
},
function(session, results){
//store username
session.userData.username = results.response;
//begin new dialogue
session.beginDialog("/get_password");
}
]);
bot.dialog("/get_password", [
function(session){
//prompt user for password here
botbuilder.Prompts.text(session, "What is your password?");
},
function(session, results){
//store password
session.userData.password = results.response;
//check credentials
if(checkCredentials(session.userData.username, session.userData.password){
//good credentials, send to post-authentication dialog
session.beginDialog("/authenticated");
} else {
//bad credentials
//reset user data and retry
session.userData.username = "";
session.userData.password = "";
session.beginDialog("/get_username");
}
}
]);方法3:
让网页与嵌入式WebChat机器人进行通信的首选方法是通过允许您创建“反向通道”的直接行REST。
使用WebChat控件(您可以在这里下载并了解回购信息),您可以通过侦听和广播您定义的事件来设置嵌入的机器人和容纳它的网页,以便相互通信。
通过签出显示客户端的示例代码,您可以看到这方面的一个很好的示例。
然后,您可以使用此方法让bot从您的网页侦听身份验证活动,当用户进行身份验证时,使用所需的凭据广播该活动,以便您的bot可以使用这些凭据。
我希望这能帮到你!
https://stackoverflow.com/questions/41458114
复制相似问题