今天使用 botframework-emulator 在 local 測試 bot 時, botframework-emulator 居然出現 The bot’s MSA appId or password is incorrect. 的錯誤,如下圖,

我輸入的 App Id 跟 Password 明明就是從 web.config 中 Copy 出來的呀~ 之前都 Run 的好好的,現在居然噴錯。
於是使用 Fiddler 來錄一下看看是什麼狀況,如下圖,

從上圖可以發現, botframework-emulator 會依 bot 的 MSA appId 及 password 到 https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token 去取回 token ,然後再放在 Request 的 Header 之中,做為 Authorization token。但卻 bot 卻判斷它是無效的,所以就回 401 。
查看 botframework-emulator 在 GitHub 上的異動記錄 Support Bot Framework authentication v3.1 (#256) 有將取 token 的 endpoint 從 common/oauth2/v2.0/token 改到了 botframework.com/oauth2/v2.0/token 。

似乎是 token 的問題,而目前我們 bot 使用的 BotBuilder 是 3.8 版,而它的 System.IdentityModel.Tokens.Jwt 使用的是 v4.0403061554 ,如下,

所以筆者試著將 System.IdentityModel.Tokens.Jwt 更新到 v5.1.4 ,重建置專案,再測試一次就沒問題了哦! 或者是您連同 BotBuilder 升級到最新的版本也是可以的哦!