對 Bot Framework 驗證進行疑難排解
適用于: SDK v4
本指南可藉由評估一系列案例來判斷問題是否存在,協助您針對 Bot 的驗證問題進行疑難排解。
注意
若要完成本指南中的所有步驟,您必須下載並使用 Bot Framework 模擬器 ,而且必須能夠存取Azure 入口網站 中的 Bot 註冊設定。
App 識別碼及密碼
Bot 安全性是由 您在向 Bot Framework 註冊 Bot 時取得的 Microsoft 應用程式識別碼 和 Microsoft 應用程式密碼 所設定。 這些值通常會在 Bot 的組態檔內指定,並用來從 Microsoft 帳戶服務擷取存取權杖。
如果您尚未這麼做, 請將 Bot 部署至 Azure ,以取得 可用來進行驗證的 Microsoft 應用程式識別碼 和 Microsoft 應用程式密碼 。
注意
若要尋找已部署 Bot 的 AppID 和 AppPassword ,請參閱 MicrosoftAppID 和 MicrosoftAppPassword 。
步驟 1:停用 localhost 上的安全性和測試
在此步驟中,您會在停用安全性時,確認 Bot 可存取且可在 localhost 上運作。
警告
停用 Bot 的安全性可能會允許未知的攻擊者模擬使用者。 只有在您在受保護的偵錯環境中作業時,才實作下列程式。
停用安全性
若要停用 Bot 的安全性,請編輯其組態設定,以移除應用程式識別碼和密碼的值。
如果您使用適用于 .NET 的 Bot Framework SDK,請在 appsettings.json 檔案中 新增或編輯設定:
"MicrosoftAppId": "",
"MicrosoftAppPassword": ""
在 localhost 上測試 Bot
接下來,使用 Bot Framework 模擬器在 localhost 上測試 Bot。
- 在 localhost 上啟動 Bot。
- 啟動 Bot Framework 模擬器。
- 使用模擬器將連線至 Bot。
- 輸入
http://localhost:port-number/api/messages
模擬器的網址列,其中 埠號碼 符合應用程式執行所在瀏覽器中顯示的埠號碼。 - 確定 [Microsoft 應用程式識別碼 ] 和 [Microsoft 應用程式密碼 ] 欄位都是空的。
- 按一下 連線。
- 輸入
- 若要測試 Bot 的連線能力,請在模擬器中輸入一些文字,然後按 Enter。
如果 Bot 回應輸入,且聊天視窗中沒有錯誤,則您已確認當安全性停用時,您的 Bot 可存取且可在 localhost 上運作。 繼續進行步驟 2 。
如果在聊天視窗中指出一或多個錯誤,請按一下錯誤(s)以取得詳細資料。 常見問題包括:
- 模擬器設定會指定 Bot 不正確的端點。 請確定您已在 URL 中包含適當的埠號碼,以及 URL 結尾的適當路徑,例如
/api/messages
。 - 模擬器設定會指定以 開頭的
https
Bot 端點。 在 localhost 上,端點應該以http
開頭。 - 模擬器設定會指定 [Microsoft 應用程式識別碼 ] 欄位和/或 [Microsoft 應用程式密碼 ] 欄位的值。 這兩個欄位應該是空的。
- Bot 的安全性尚未停用。 確認 Bot 未指定應用程式識別碼或密碼的值。
步驟 2:驗證 Bot 的應用程式識別碼和密碼
在此步驟中,您將確認 Bot 將用於驗證的應用程式識別碼和密碼是否有效。 (如果您不知道這些值, 請立即取得這些 值。
警告
下列指示會停用 的 login.microsoftonline.com
SSL 驗證。 只有在安全網路上執行此程式,並考慮在之後變更應用程式的密碼。
對 Microsoft 登入服務發出 HTTP 要求
這些指示說明如何使用 cURL 向 Microsoft 登入服務發出 HTTP 要求。 您可以使用 Postman 之類的替代工具,只要確定要求符合 Bot Framework 驗證通訊協定 即可。
若要確認 Bot 的應用程式識別碼和密碼是否有效,請使用 cURL 發出下列要求,並以 APP_ID
Bot 的應用程式識別碼和密碼取代 和 APP_PASSWORD
。
提示
您的密碼可能包含使下列呼叫不正確特殊字元。 如果是,請嘗試將您的密碼轉換成 URL 編碼。
curl -k -X POST https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token -d "grant_type=client_credentials&client_id=APP_ID&client_secret=APP_PASSWORD&scope=https%3A%2F%2Fapi.botframework.com%2F.default"
此要求會嘗試交換 Bot 的應用程式識別碼和密碼,以取得存取權杖。 如果要求成功,您會收到 JSON 承載,其中包含 access_token
屬性等等。
{"token_type":"Bearer","expires_in":3599,"ext_expires_in":0,"access_token":"eyJ0eXAJKV1Q..."}
如果要求成功,您已確認您在要求中指定的應用程式識別碼和密碼有效。 繼續進行步驟 3 。
如果您在回應要求時收到錯誤,請檢查回應以識別錯誤的原因。 如果回應指出應用程式識別碼或密碼無效, 請從 Bot Framework 入口網站取得正確的值,並使用新的值 重新發出要求,以確認它們有效。
步驟 3:在 localhost 上啟用安全性和測試
此時,您已確認在停用安全性時,Bot 可存取且可在 localhost 上運作,並確認 Bot 將用於驗證的應用程式識別碼和密碼有效。 在此步驟中,您會在啟用安全性時,確認 Bot 可存取且可在 localhost 上運作。
啟用安全性
即使 Bot 只在 localhost 上執行,Bot 的安全性仍依賴Microsoft 服務。 若要啟用 Bot 的安全性,請編輯其組態設定,以使用您在步驟 2 中 驗證的值填入應用程式識別碼和密碼。 此外,請確定您的套件是最新的,特別是 System.IdentityModel.Tokens.Jwt
和 Microsoft.IdentityModel.Tokens
。
如果您使用適用于 .NET 的 Bot Framework SDK,請在檔案 appsettings.config
中 appsettings.json
填入這些設定或對應的值:
<appSettings>
<add key="MicrosoftAppId" value="APP_ID" />
<add key="MicrosoftAppPassword" value="PASSWORD" />
</appSettings>
如果您使用適用于 Node.js 的 Bot Framework SDK,請填入這些設定(或更新對應的環境變數):
var connector = new builder.ChatConnector({
appId: 'APP_ID',
appPassword: 'PASSWORD'
});
注意
若要尋找 Bot 的 AppID 和 AppPassword ,請參閱 MicrosoftAppID 和 MicrosoftAppPassword 。
在 localhost 上測試 Bot
接下來,使用 Bot Framework 模擬器在 localhost 上測試 Bot。
- 在 localhost 上啟動 Bot。
- 啟動 Bot Framework 模擬器。
- 使用模擬器將連線至 Bot。
- 輸入
http://localhost:port-number/api/messages
模擬器的網址列,其中 埠號碼 符合應用程式執行所在瀏覽器中顯示的埠號碼。 - 在 [Microsoft 應用程式識別碼] 欄位中輸入您的 Bot 應用程式識別碼 。
- 在 [Microsoft 應用程式密碼] 欄位中輸入您的 Bot 密碼 。
- 按一下 連線。
- 輸入
- 若要測試 Bot 的連線能力,請在模擬器中輸入一些文字,然後按 Enter。
如果 Bot 回應輸入,且聊天視窗中沒有任何錯誤,則您已確認啟用安全性時,Bot 可存取且可在 localhost 上運作。 繼續進行步驟 4 。
如果在聊天視窗中指出一或多個錯誤,請按一下錯誤(s)以取得詳細資料。 常見問題包括:
- 模擬器設定會指定 Bot 不正確的端點。 請確定您已在 URL 中包含適當的埠號碼,以及 URL 結尾的適當路徑,例如
/api/messages
。 - 模擬器設定會指定以 開頭的
https
Bot 端點。 在 localhost 上,端點應該以http
開頭。 - 在 [模擬器] 設定中,[ Microsoft 應用程式識別碼 ] 欄位和/或 [Microsoft 應用程式密碼 ] 未包含有效值。 這兩個欄位都應該填入,而且每個欄位都應該包含您在步驟 2 中 驗證的對應值。
- Bot 尚未啟用安全性。 確認 Bot 組態設定同時指定應用程式識別碼和密碼的值。
步驟 4:在雲端中測試 Bot
此時,您已確認 Bot 在停用安全性時可在 localhost 上存取並正常運作、確認 Bot 的應用程式識別碼和密碼有效,並在啟用安全性時確認您的 Bot 可存取且可在 localhost 上運作。 在此步驟中,您會將 Bot 部署至雲端,並確認其可存取且功能已啟用安全性。
將 Bot 部署至雲端
Bot Framework 需要從網際網路存取 Bot,因此您必須將 Bot 部署至 Azure 等雲端裝載平臺。 請務必在部署前啟用 Bot 的安全性,如步驟 3 中所述 。
注意
如果您還沒有雲端裝載提供者,您可以註冊 免費帳戶 。
如果您將 Bot 部署至 Azure,系統會自動為您的應用程式設定 SSL,藉此啟用 Bot Framework 所需的 HTTPS 端點。 如果您部署到另一個雲端裝載提供者,請務必確認您的應用程式已針對 SSL 進行設定,讓 Bot 具有 HTTPS 端點。
測試您的機器人
若要在已啟用安全性的雲端中測試 Bot,請完成下列步驟。
- 請確定您的 Bot 已成功部署並正在執行。
- 登入 Azure 入口網站。
- 在入口網站中流覽至 Bot 的 Azure Bot 資源。
- 按一下 左側 [Bot 管理 ] 窗格中網路聊天 中的 [測試]。
- 若要測試 Bot 的連線能力,請在網路聊天控制項中輸入一些文字,然後按 Enter。
如果在聊天視窗中指出錯誤,請使用錯誤訊息來判斷錯誤的原因。 常見問題包括:
- Bot Framework 入口網站中 Bot 設定 頁面上指定的傳訊端點 不正確。 請確定您已在 URL 結尾包含適當的路徑,例如
/api/messages
。 - Bot Framework 入口網站中 Bot 的 [設定] 頁面上指定的 傳訊端點 不會以
https
Bot Framework 開頭或不受 Bot Framework 信任。 您的 Bot 必須具有有效的鏈結信任憑證。 - Bot 會針對應用程式識別碼或密碼設定遺漏或不正確的值。 確認 Bot 組態設定指定應用程式識別碼和密碼的有效值。
如果 Bot 會適當地回應輸入,表示您已確認您的 Bot 可存取且可在雲端中運作,且已啟用安全性。 此時,您的 Bot 已準備好安全地 連線到 Facebook Messenger、Direct Line 等通道 。
其他資源
如果您在完成上述步驟之後仍遇到問題,您可以:
- 檢閱如何偵 錯 Bot ,以及該區段中的其他偵錯文章。
- 使用 Bot Framework 模擬器和 ngrok 通道軟體在雲端 中對 Bot 進行偵錯。 ngrok 不是 Microsoft 產品。
- 使用 Fiddler 之類的 Proxy 程式工具來檢查 Bot 的 HTTPS 流量。 Fiddler 不是 Microsoft 產品。
- 檢閱 Bot 連線or 驗證指南 ,以瞭解 Bot Framework 所使用的驗證技術。
- 使用 Bot Framework 支援 資源向其他人尋求協助。