對 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 不正確的端點。 請確定您已在網址中包含適當的連接埠號碼,以及網址結尾的適當路徑,例如
/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 不正確的端點。 請確定您已在網址中包含適當的連接埠號碼,以及網址結尾的適當路徑,例如
/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 的 [設定] 頁面上指定的傳訊端點不正確。 請確定您已在網址結尾包含適當的路徑,例如
/api/messages
。 - Bot Framework 入口網站中 Bot 的 [設定] 頁面上指定的傳訊端點不會以
https
Bot Framework 開頭或不受 Bot Framework 信任。 您的 Bot 必須具有有效的鏈結信任憑證。 - Bot 會針對應用程式標識碼或密碼設定遺漏或不正確的值。 確認 Bot 組態設定指定應用程式識別碼和密碼的有效值。
如果 Bot 會適當地回應輸入,表示您已確認您的 Bot 可存取且可在雲端中運作,且已啟用安全性。 此時,您的 Bot 已準備好安全地 連線到 Facebook Messenger、Direct Line 等通道 。
其他資源
如果您在完成上述步驟之後仍遇到問題,您可以:
- 檢閱如何偵 錯 Bot ,以及該區段中的其他偵錯文章。
- 使用 Bot Framework 模擬器和 [Dev Tunnels](https://aka.ms/devtunnels通道軟體在雲端中對 Bot 進行偵錯。
- 使用 Fiddler 之類的 Proxy 程式工具來檢查 Bot 的 HTTPS 流量。 Fiddler 不是Microsoft產品。
- 檢閱 Bot 連接器驗證指南,以瞭解 Bot Framework 所使用的驗證技術。
- 使用 Bot Framework 支援 資源向其他人尋求協助。