圖形認證服務通過理清人機請求邊界并以圖形交互抵御機器異常請求,可用于幫助企業在注冊、搶購、查詢等業務運營過程中識別并防御各種機器虛擬流量。本文將介紹如何通過在服務端調用接口使用圖形認證功能。
Demo下載
請根據您所需語言下載對應Demo,根據README.md文件指引,運行Demo并啟動項目。
接入流程
在圖形認證方案管理控制臺新增認證方案,獲取密鑰參數(包括
appId
、appKey
)。服務端配置
appId
、appKey
參數。用戶在客戶端界面通過圖形驗證碼后,客戶端將生成驗證參數。
服務端業務接口獲取用戶業務請求及驗證參數,生成簽名后,上傳到二次校驗接口,確認用戶本次驗證的有效性。
示例代碼
服務端集成示例代碼如下:
def post(self):
# 1.初始化驗證密鑰參數信息
# 請填寫在控制臺創建認證方案后生成的appId和appKey
captcha_id = "<YOUR_APP_ID>" # 請填寫appId
captcha_key = "<YOUR_APP_KEY>" # 請填寫appKey
api_server = "https://captcha.alicaptcha.com"
# 2.獲取用戶驗證后,前端傳過來的驗證參數
lot_number = self.get_argument("lot_number", "")
captcha_output = self.get_argument("captcha_output", "")
pass_token = self.get_argument("pass_token", "")
gen_time = self.get_argument("gen_time", "")
# 3.生成簽名
# 生成簽名使?標準的hmac算法,使用用戶當前完成驗證的流水號lot_number作為原始消息message
# 采用sha256散列算法將message和key進行單向散列生成最終的簽名
lotnumber_bytes = lot_number.encode()
prikey_bytes = captcha_key.encode()
sign_token = hmac.new(prikey_bytes, lotnumber_bytes, digestmod="SHA256").hexdigest()
# 4.上傳校驗參數到驗證服務?次驗證接口, 校驗用戶驗證狀態
query = {
"lot_number": lot_number,
"captcha_output": captcha_output,
"pass_token": pass_token,
"gen_time": gen_time,
"sign_token": sign_token,
}
# captcha_id參數建議放在url后面, 方便請求異常時可以在日志中根據id快速定位到異常請
url = api_server + "/validate" + "?captcha_id={}".format(captcha_id)
# 注意處理接口異常情況,當請求?次驗證接口異?;蝽憫獱顟B非200時做出相應異常處理
# 保證不會因為接口請求超時或服務未響應而阻礙業務流程
try:
res = requests.post(url, query)
assert res.status_code == 200
msg = json.loads(res.text)
except Exception as e:
msg = {"result": "success", "reason": "request api fail"}
# 5.根據?次驗證接口返回的用戶驗證狀態, 完成您自己的業務邏輯
if msg["result"] == "success":
self.write({"login": "success", "reason": msg["reason"]})
else:
self.write({"login": "fail", "reason": msg["reason"]})
二次校驗接口
接口信息 | 說明 |
接口地址 | https://captcha.alicaptcha.com/validate |
協議?持 | HTTP/HTTPS |
請求方法 | GET/POST |
請求格式 | application/x-www-form-urlencoded |
返回類型 | JSON |
請求參數
請求參數 | 類型 | 說明 |
lot_number | String | 驗證流水號。 |
captcha_output | String | 驗證輸出信息。 |
pass_token | String | 驗證通過標識。 |
gen_time | String | 驗證通過時間戳。 |
captcha_id | String | 驗證ID。 |
sign_token | String | 驗證簽名。 |
返回示例
校驗成功返回示例
{
"status": "success", // 請求狀態
"result": "success", // ?次校驗結果
"reason": "", // 校驗結果說明
"captcha_args": { // 驗證輸出參數
"used_type": "icon",
"user_ip": "127.0.0.1",
"lot_number": "4dc3cfc2cdff448cad8d13107198d473",
"scene": "反爬蟲",
"referer": "http://127.0.0.1:8077/"
// ...
}
}
校驗失敗返回示例
{
"status": "success", // 請求狀態
"result": "fail", // ?次校驗結果
"reason": "pass_token expire", // 校驗結果說明
"captcha_args": { // 驗證輸出參數
"used_type": "icon",
"user_ip": "127.0.0.1",
"lot_number": "4dc3cfc2cdff448cad8d13107198d473",
"scene": "反爬蟲",
"referer": "http://127.0.0.1:8077/"
// ...
}
}
請求結果異常返回示例
{
"status": "error", // 請求狀態
"code": "-50005", // 錯誤碼
"msg": "illegal gen_time", // 錯誤信息
"desc": { // 錯誤描述
"type": "defined error"
}
}
文檔內容是否對您有幫助?