先區分通路識別碼與客戶身分
LINE Messaging API 提供的使用者 ID,代表某位使用者在特定 Provider 下的通路身分,但它不是身分證字號、會員編號,也不是可直接信任的 CRM 主鍵。即使 CRM 已有相同手機號碼、姓名或電子郵件,也不應只靠字串相符就自動綁定;共用電話、資料過期、輸入錯誤與帳號移轉都可能把訊息或權益交給錯誤的人。
較穩健的模型會建立獨立的身分連結表,保存 LINE 使用者 ID、CRM 客戶 ID、綁定狀態、驗證方式、建立時間、最近驗證時間、解除原因及稽核版本。LINE ID 與 CRM ID 都不應互相取代。這層對應關係讓系統可以暫停、重新驗證或移轉綁定,而不必修改 CRM 的核心客戶資料。
設計前應先界定綁定後可以做什麼。查詢一般服務進度、查看個人訂單、變更聯絡資料與執行付款,風險等級並不相同。權限應依操作敏感度逐步提升,而不是完成一次綁定後永久開放所有功能。
用一次性流程證明雙方控制權
推薦做法是讓使用者從 LINE 內開啟 LIFF 或受控網頁,再登入既有會員系統,或完成 CRM 已登記管道的驗證。後端產生短效、一次性且不可預測的綁定交易,並在完成時同時確認 LINE 登入結果、CRM 驗證結果與交易狀態。不要讓前端自行提交可任意更換的 CRM 客戶 ID,也不要把長效憑證、會員編號或個資放入 URL。
實作時可把流程拆成幾個明確控制點:
- 交易建立:由後端建立高熵隨機 nonce,設定短效期限、單次使用與明確用途,並記錄發起的 LINE 身分與裝置脈絡。
- 客戶驗證:優先沿用企業既有登入與多因素驗證;若使用簡訊或電子郵件 OTP,必須限制嘗試次數、發送頻率及重送行為。
- 結果交換:使用後端對後端方式取得已驗證的 CRM 客戶 ID,避免信任瀏覽器傳回的隱藏欄位或查詢參數。
- 原子寫入:在同一交易中檢查衝突並建立連結,確保重複點擊、逾時重送或並行請求不會產生多筆有效綁定。
- 完成通知:只顯示必要資訊,並透過既有可信管道通知客戶綁定時間與解除方式,讓非本人操作可以被及早發現。
若業務允許一位客戶綁定多個 LINE 帳號,資料模型必須明確支援角色、關係與權限,例如本人、家屬或企業聯絡人。若只允許一對一,遇到既有綁定時應要求先登入原帳號解除,或交由受控的客服驗證流程處理,不能直接以新綁定覆蓋舊資料。
把權杖、個資與訊息權限分開管理
綁定成功不代表後續每個 webhook 都可信。系統仍須驗證 LINE webhook 簽章、防止重播,並以事件 ID 或業務冪等鍵去重。LIFF 或 LINE Login 的權杖應由後端依官方端點驗證其簽發者、受眾、有效期與 nonce;CRM 的存取憑證則保存在伺服器端的密鑰管理服務中,設定最小權限、輪替與環境隔離。
對應表通常只需要保存穩定識別碼與安全營運所需的中繼資料,不必複製完整客戶檔案。日誌應避免寫入 access token、OTP、完整電話、訊息內容與 CRM 回應全文。若客服介面需要辨識客戶,可顯示遮罩後的聯絡資訊與有限摘要,並由後端依操作者權限即時取得資料。
授權判斷也應留在服務端。聊天機器人收到查詢後,先確認連結仍有效,再根據功能風險判斷是否需要近期重新驗證。對地址變更、敏感文件、金融或高價值操作,可要求重新登入或轉往受控頁面完成,不應在聊天文字中收集完整機密資料。
預先設計解除、衝突與稽核
身分連結一定會遇到封鎖官方帳號、刪除 LINE 帳號、會員合併、手機轉讓、CRM 重複客戶及客服協助解除等情況。解除綁定應使連結立即失效,撤銷相關工作階段與授權,並保留最少且不可竄改的稽核紀錄。稽核事件至少要能回答誰在何時以何種驗證方式建立、變更或解除連結,以及當時適用的政策版本。
上線前應測試過期 nonce、重複 callback、偽造 state、權杖受眾錯誤、同一客戶並行綁定、已綁定 LINE ID 改綁、CRM 暫時不可用與 webhook 重送。監控重點不是收集更多個資,而是觀察異常嘗試、驗證失敗、衝突率、解除事件與權限拒絕,並為客服提供不暴露敏感資訊的查核路徑。
真正安全的綁定不是一個登入按鈕,而是一套可撤銷、可追蹤、可分級授權的身分生命週期。當 LINE、CRM 與既有會員系統分屬不同團隊時,及早由整合團隊共同定義信任邊界與例外流程,通常比事後補強更可靠。