2017-01-04 75 views
2

我們計劃部署BoT作爲一種幫助臺,根據用戶的文本接受查詢並提出支持憑單。我們希望將我們的BoT與我們自己的AD集成進行認證。如果AD身份驗證不起作用,那麼對我們來說,計劃B就是說我們將BoT作爲網頁聊天BoT託管在我們的網頁中,並且所有身份驗證均在Web應用程序中完成。但是我們仍然需要捕獲登錄到Web應用程序的用戶,以便我們代表他爲其提供一些支持服務。任何想法如何登錄用戶的詳細信息可以從託管網頁傳遞給BoT。託管網頁可以是Azure或本地實施。對MS BoT框架中的BoT進行身份驗證

AuthBoT是唯一的出路,用戶將被重定向到Web應用程序進行登錄,並且魔術代碼將被驗證併發送回BoT。我們是否具有無縫認證方式,無需重定向到另一個網頁進行認證?

我的客戶不想進入另一個網頁並輸入他的憑證以在此處進行身份驗證。他想要更加無縫的認證。從某種意義上說,他是對的,因爲他已經認證了自己並登錄了網頁,BoT是他網頁上的另一個片段。他的觀點是爲什麼我們需要再次登錄,BoT爲什麼不能從託管網頁獲取身份驗證/令牌。這裏有什麼建議?

回答

3

有幾種方法可以解決您的情況。

據我瞭解,當客戶端通過聊天機器人小部件到達網頁時,用戶已通過網頁對您的網站進行身份驗證。

編輯:我已經添加了第三種方法,是進行網頁和嵌入式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....... 
}); 

這樣,你會在機器人對話端點進行正常的邏輯來創建和處理支持票。如果在稍後的對話路線中需要,您甚至可以將authToken存儲在session對象內。 session.userData.authToken = authToken;

方法2:

另外,你可以驗證用戶的方式通過瀑布對話框僅僅是通過聊天窗口本身。 然而,這不會真正解決您的用戶驗證兩次的問題,但它可以解決用戶不得不離開當前網頁進行身份驗證的問題。

//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"); 
       } 
     } 
]); 

You can actually check out a working example of the above Method 2 code here.

方法3::

具有網頁的優選方式與通信

機器人程序將通過輸入他們的憑證的過程中引導用戶嵌入WebChat機器人是通過Direct Line REST API,允許您創建一個「backchannel」。

使用WebChat控件(which you can download and learn about from the repo here),您可以設置嵌入式機器人和網頁,通過監聽和廣播您定義的事件來相互通信。

You can see a great example of this by checking out this example code that shows the client side.

While this code demonstrates what the bot & server-side code is doing behind the scenes.

然後,您可以使用此方法讓你的機器人偵聽來自你的網頁的認證活動,而當用戶進行身份驗證,播出活動與附着,使所需憑證他們可以被你的機器人使用。

我希望這有助於!