これは可能ですが、実際には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();
}
}
});
// [...]
実際にはないことここでの質問は、シナリオの観点からこれをさらに明確にしましょう。 WebAPIがAzureで公開され、ボットポータルを使用して公開されています。このボットに送信されたメッセージが特定の企業/テナントからのみ送信されていることをどのように知ることができますか。 接続のためにチームサイトに秘密を設定できる場合は、httpトラフィックで確認できますが、これは可能ではないようです。 なぜですか? - ボットのエンタープライズシナリオを実行できるように、WebAPIが匿名で公開されている場合、誰がそのボットを呼び出すのか分からずにアプリ専用アクセスを使用することはできません。 – user3813126
ボットに送信されたメッセージが特定のテナントからのみ送信されているかどうかは分かりません。あなたはAADに対してユーザーを認証した後で* out *を把握することしかできません。だから私はボット・フレームワーク・ボットと話しているユーザーを認証する方法を示すAuthBotについて述べました。 –