2016-11-03 9 views
0

Microsoftチームからボットへのトラフィックをどのようにしてボットが会社固有の質問/ディスカッションに答えることができ、匿名のWebAPIとして公開する必要はありませんか?Microsoftチームからボットへのトラフィックを保護しますか?

チームUIへのボットの統合は、ボットフレームワーク側からは簡単ですが、現在、特定の企業専用にボットを隔離する方法に関するドキュメントはありません。

ビジネスケース - エンタープライズ固有のボットを作成します。このボットは、質問が出てくる特定の企業に固有の質問にのみ回答できます。技術的には、SharePointやMicrosoft Graphへのアプリケーションのみのアクセスでこれを行うことができますが、この種のWebAPIを匿名でインターネットに公開することはできません。

このデザインパターンはありますか?

答えて

0

現在、ボットがユーザーを最初に認証しない限り、すぐにボットを使用してチャットしているユーザーのテナントIDを知ることはできません。 AuthBotをご覧ください。ユーザーにサインインリンクを送信し、AADに対してユーザーを認証する方法を示しています。

+0

実際にはないことここでの質問は、シナリオの観点からこれをさらに明確にしましょう。 WebAPIがAzureで公開され、ボットポータルを使用して公開されています。このボットに送信されたメッセージが特定の企業/テナントからのみ送信されていることをどのように知ることができますか。 接続のためにチームサイトに秘密を設定できる場合は、httpトラフィックで確認できますが、これは可能ではないようです。 なぜですか? - ボットのエンタープライズシナリオを実行できるように、WebAPIが匿名で公開されている場合、誰がそのボットを呼び出すのか分からずにアプリ専用アクセスを使用することはできません。 – user3813126

+0

ボットに送信されたメッセージが特定のテナントからのみ送信されているかどうかは分かりません。あなたはAADに対してユーザーを認証した後で* out *を把握することしかできません。だから私はボット・フレームワーク・ボットと話しているユーザーを認証する方法を示すAuthBotについて述べました。 –

0

あなたが探しているものは正確ではありませんが、create custom botsは個々のチームにスコープされます。

セキュリティキー/ HMAC認証により、他のユーザーがAPIにアクセスできなくなります。この欠点を利用するには、使用するチームごとに別々のセキュリティトークンを使用してボットを設定する必要があります。

3

これは可能ですが、実際にはCoffeeScriptとNode.JSのHubot用に実装しました。私が以下で説明したのは、JavaScript/Node.JSのようなものです。

設定すると、特定のテナントID、OFFICE_365_TENANT_FILTERをフィルタリングする環境変数を定義します。この方法を使用すると、生産中にこの機能をオンにする便利な方法ですが、開発中に必ずしもそうする必要はありません。

Microsoftチームの場合、Office 365のテナントIDはsession.message.sourceEvent.tenant.idです。

それを行うための最もエレガントな方法は、ミドルウェアとしてテナントIDをチェックし、フィルタが設定され、それが一致しない場合だけ、メッセージのさらなる処理をドロップすることです:

// [...] 
var connector = new builder.ChatConnector({ 
    appId: process.env.MICROSOFT_APP_ID, 
    appPassword: process.env.MICROSOFT_APP_PASSWORD 
}); 

var bot = new builder.UniversalBot(connector); 

// Middleware to check for OFFICE_365_TENANT_FILTER and only continue processing if it matches. 
// If OFFICE_365_TENANT_FILTER is not specified, do nothing. 
bot.use({ 
    botbuilder: function(session, next) { 
    var targetTenant = typeof(process.env.OFFICE_365_TENANT_FILTER) !== "undefined" ? process.env.OFFICE_365_TENANT_FILTER : null; 
    var currentMsgTenant = typeof(session.message.sourceEvent.tenant) !== "undefined" ? session.message.sourceEvent.tenant.id : null; 
    if (targetTenant !== null) { 
     if (targetTenant == currentMsgTenant) { 
     next(); 
     } 
     else { 
     console.log("MS Teams: Attempted access from a different Office 365 tenant (" + currentMsgTenant + "): message rejected"); 
     } 
    } 
    else { 
     next(); 
    } 
    } 
}); 
// [...] 
+0

私はこれを少し編集した後、バグを見つけました。間違ったオブジェクトをチェックしていました。 –