概述
TWCA提供API串接其電話號碼核實功能,可用來核實用戶門號與其身分是否相符,避免用戶利用非本人門號在網站執行惡意行為,但由於其成本較高,建議作為網站防範惡意行為的最終手段,應先以其他基本方式過濾網站惡意用戶。
流程
TWCA採用OAuth方式先對來源進行驗證,驗證完成後會提供一組Token供我方網頁端導向到用戶認證頁面,用戶於該認證頁面完成動作後,TWCA會回傳一組認證結果到我方提供的API,我方在根據該結果做後續用戶處理即可,詳細流程如下。
- 我方程式Controller發送一組請求到TWCA Login API。
- 若API回傳的ResultCode=”S”,代表所傳送的需求與TWCA所要求的格式相符。
- 將API回傳的資料組成TWCA DO API 所需要的格式,以Form post的方式導向到TWCA提供的網頁。
- TWCA Server端處理完用戶驗證結果後,會以Http Web Post的形式傳送資料回我方發送請求到TWCA Login API時資料內所帶的ReturnURL。
加密
不論是發送請求到TWCA的哪個API,TWCA都要求傳送一組IdentifyNo作為雙方驗證資料正確性的依據,其規則是將除了自身及ReturnURL以外的參數按照順序串聯後, 先將字串進行UTF16-LE編碼轉為binary後,使用SHA256進行加密後將結果的Hash值轉成小寫字串,以下以C#程式碼為例。
- 將字串進行UTF16-LE 編碼轉為binary
var IdentifyNo = Encoding.GetEncoding(“UTF-16LE”).GetBytes(組合完字串); - 使用SHA256進行加密
var IdentifyNoStr = new SHA256CryptoServiceProvider().ComputeHash(IdentifyNo); - 將SHA256加密完的Hash值用 16 進位字串(英文小寫)表示並轉成小寫字串
string hexString = BitConverter.ToString(IdentifyNoStr).Replace(“-“, “”).ToLower();
最後得到的hexString即是IdentifyNo要送出的值。
結論
TWCA提供的功能目前較鮮為人知,每個人對於文件的閱讀習慣不同,以及對於規格的描述習慣是造成實作API串接功能困難的主因,為了避免往後開發相關功能時耗費大量時間,花了點時間整理此篇串接流程作為往後開發相關功能之參考依據。