亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

集成阿里云滑動驗證(python)

bang590 / 1474人閱讀

摘要:阿里云的服務(wù)數(shù)據(jù)風控下面有項滑動驗證適合有人機驗證場景的應(yīng)用接入所謂滑動驗證是在需要進行人機識別時前端出現(xiàn)驗證滑塊通過拖動滑塊到末尾實現(xiàn)驗證如果阿里云認為此次驗證風險稍高可能出現(xiàn)點擊漢字的認證等如果風險太高驗證會直接拒絕集成過程基本是按照阿

阿里云的服務(wù) 數(shù)據(jù)風控下面有項滑動驗證, 適合有人機驗證場景的應(yīng)用接入.

所謂滑動驗證, 是在需要進行人機識別時, 前端出現(xiàn)驗證滑塊, 通過拖動滑塊到末尾, 實現(xiàn)驗證. 如果阿里云認為此次驗證風險稍高, 可能出現(xiàn)點擊漢字的認證等, 如果風險太高, 驗證會直接拒絕.

集成過程基本是按照 阿里云官方文檔 來進行的.

開通滑動驗證服務(wù)之后, 阿里云控制臺會給出前后端的示例代碼, 其中appkey是根據(jù)用戶不同分配的不通的key.

前端代碼如下所示:




  
  示例-WEB版

  
  
  
    





用戶名:
密碼:

其中標記不可更改的地方就不要更改. 可以看到, 在驗證通過之后, console會打印出session, sig, token等幾個驗證返回變量, 連同scene一起, 通過表單返回業(yè)務(wù)后臺, 由后臺調(diào)用阿里云滑動驗證服務(wù)進行校驗.

python后臺方面, 首先需要

pip install aliyun-python-sdk-jaq

安裝阿里云滑動驗證的python sdk
python的后臺代碼大致如下:

# coding: utf-8
import requests
from aliyunsdkcore import client
from aliyunsdkjaq.request.v20161123 import AfsCheckRequest
from aliyunsdkcore.profile import region_provider
from app.libs.configure import config

region_provider.modify_point("Jaq", "cn-hangzhou", "jaq.aliyuncs.com")

clt = client.AcsClient(config.ALIYUN_OSS_ACCESS_KEY, config.ALIYUN_OSS_ACCESS_SECRET, "cn-hangzhou")


def check_aliyun_captcha(session, sig, token, scene):
    request = AfsCheckRequest.AfsCheckRequest()
    # 必填參數(shù):請求來源: 1:Android端; 2:iOS端; 3:PC端及其他
    request.set_Platform(3)
    request.set_Session(session)
    request.set_Sig(sig)
    request.set_Token(token)
    request.set_Scene(scene)
    result = clt.do_action_with_exception(request)
    print result

這只是個簡單示例, print出了返回結(jié)果. 這個返回結(jié)果是json序列化的string, 需要將其反序列化進行結(jié)果判定. 如果Data元素是true的話, 證明校驗通過, 可以進行下面的業(yè)務(wù)邏輯.
同樣的, 這里還有一點沒有處理, 就是do_action_with_exception的拋出ServerException的問題. 應(yīng)當catch處理.

如果驗證通過的話, 阿里云返回:

{"Data":true,"ErrorMsg":"success.","ErrorCode":0}

但只能驗證一次, 第二次同樣參數(shù)執(zhí)行的話, 會返回:

{"Data":false,"ErrorMsg":"invalid sig parameter.","ErrorCode":400}

是為了防止暴力嘗試等.

同時必須說明, 阿里云的這項服務(wù)我認為并不穩(wěn)定, 集成中間出現(xiàn)了一直invalid sig的報錯. 后來經(jīng)與技術(shù)支持溝通才ok. 并且這塊的文檔友好程度等還比較欠缺.

另: 我還按照阿里云api文檔(滑動驗證api, 公共參數(shù), 簽名機制)的說明寫了段代碼, 不使用aliyun-python-sdk, 手動拼接請求.同樣發(fā)現(xiàn)了很多問題.
比如文檔中有一段


這個簽名值應(yīng)當不是隨便寫的. 使用文檔中要求的HMAC-SHA1簽名算法, 無論是用python像如下這樣書寫:

from hashlib import sha1
import hmac
from base64 import b64encode

hashed = hmac.new("testsecret&", string_to_sign, sha1)
signature = b64encode(hashed.digest())
print signature

還是像如下用Java算簽名:

import javax.crypto.Mac;  
import javax.crypto.SecretKey;  
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;  
  
public class HMACSHA1 {  
  
    private static final String MAC_NAME = "HmacSHA1";    
    private static final String ENCODING = "UTF-8";    

    public static byte[] HmacSHA1Encrypt(String encryptText, String encryptKey) throws Exception {           
        byte[] data=encryptKey.getBytes(ENCODING);  
        SecretKey secretKey = new SecretKeySpec(data, MAC_NAME);   
        Mac mac = Mac.getInstance(MAC_NAME);   
        mac.init(secretKey);    
        byte[] text = encryptText.getBytes(ENCODING);    
        return mac.doFinal(text);    
    }
    
    public static void main(String[] args) throws Exception{
        byte[] bytes = HMACSHA1.HmacSHA1Encrypt("string_to_sign", "testsecret&");
        System.out.println(Base64.encodeBase64String(bytes));
    }
} 

string_to_sign用文檔中給出的替換, 我的兩段程序算出的是一致的, 但都跟文檔中給出的不一致. 不清楚為何基礎(chǔ)算法會不一致, 難道是文檔不夠新.

如果我用python如下根據(jù)api文檔實現(xiàn)自己的后臺請求方法的話:

import random
from urllib import quote
from hashlib import sha1
import hmac
import requests
from base64 import b64encode
import datetime

def utcnow_isostr():
    dt = datetime.datetime.utcnow()
    return datetime.datetime.strftime(dt, "%Y-%m-%dT%H:%M:%SZ")

def quote_ali(element):
    return quote(str(element)).replace("+", "20%").replace("*", "2A%").replace("%7E", "~")

def build_afs_check_request(session, sig, token, scene):
    m = dict()
    m["Action"] = "AfsCheck"
    m["Format"] = "JSON"
    m["Version"] = "2016-11-23"
    m["AccessKeyId"] = config.ALIYUN_OSS_ACCESS_KEY
    m["SignatureMethod"] = "HMAC-SHA1"
    m["Timestamp"] = utcnow_isostr()
    m["SignatureVersion"] = "1.0"
    m["SignatureNonce"] = str(int(random.random()*1000000))
    m["token"] = token
    m["sig"] = sig
    m["session"] = session
    m["scene"] = scene
    m["platform"] = 3
    ks = m.keys()
    ks.sort()
    query_list = list()
    for k in ks:
        query_list.append(k + "=" + quote_ali(m[k]))
    string_to_sign = "GET&%2F&" + "&".join(query_list)
    print string_to_sign
    base_query_string = "&".join(query_list)
    hashed = hmac.new(config.ALIYUN_OSS_ACCESS_SECRET + "&", string_to_sign, sha1)
    signature = b64encode(hashed.digest())
    print signature
    url = "http://jaq.aliyuncs.com/?{}&Signature={}".format(base_query_string, quote_ali(signature))
    print url
    return url

def custom_check_aliyun_captcha(session, sig, token, scene):
    url = build_afs_check_request(session, sig, token, scene)
    resp = requests.get(url)
    print resp.content

這么去請求的話會報Signature不一致, 果不出所料.

基于以上詭異的表現(xiàn), 我覺得阿里云滑動驗證作為外部服務(wù)并不友好或成熟. 更傾向于用自己做的一些驗證碼服務(wù), 雖然會簡單些, 更容易被攻破, 至少穩(wěn)定, 提供的qps更高.

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/40727.html

相關(guān)文章

  • 首次公開,整理12年積累的博客收藏夾,零距離展示《收藏夾吃灰》系列博客

    摘要:時間永遠都過得那么快,一晃從年注冊,到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...

    Harriet666 評論0 收藏0
  • Linux設(shè)備如何接入阿里IoT平臺

    摘要:名詞解釋設(shè)備端阿里云物聯(lián)網(wǎng)平臺提供的即設(shè)備端,用于設(shè)備端開發(fā)。設(shè)備廠商將設(shè)備端集成到設(shè)備上,設(shè)備便可通過該安全地接入到阿里云物聯(lián)網(wǎng)平臺。設(shè)備證書設(shè)備證書指和,是阿里云物聯(lián)網(wǎng)平臺認證設(shè)備的標識。 本文以在Ubuntu x86_64系統(tǒng)上編譯設(shè)備端C語言SDK為例,介紹設(shè)備上云的配置和開發(fā)過...

    沈建明 評論0 收藏0
  • 100%移植阿里移動測試技術(shù),竟僅需1周?!——移動測試專有(3)——內(nèi)容詳解

    摘要:換句話說就是,讓測試更有針對性。得益于強大的測試技術(shù),兼容性測試的檢出率遠遠高于業(yè)界水平。同時,在性能測試方面,即提供了項性能指標曲線性能分析,更提供了強大的內(nèi)存泄漏和內(nèi)存溢出的檢測和分析能力。 摘要: Android兼容性測試旨在幫助解決Android應(yīng)用在不同真機機型上的各類兼容性問題,包括 Crash/ANR分析、6項性能分析、UI檢測、3個版本的覆蓋安裝檢測等。Android兼...

    付永剛 評論0 收藏0
  • 阿里平臺發(fā)送短信

    摘要:獲取阿里云訪問密鑰為了使用短信發(fā)送,您必須申請阿里云的訪問密鑰。國際港澳臺消息只能使用國際港澳臺短信模版發(fā)送短信。 1.獲取阿里云訪問密鑰 為了使用短信發(fā)送API-Python SDK,您必須申請阿里云的訪問密鑰。 阿里云訪問秘鑰是阿里云為用戶使用 API(非控制臺)來訪問其云資源設(shè)計的安全口令。您可以用它來簽名 API 請求內(nèi)容以通過服務(wù)端的安全驗證。 該訪問秘鑰成對(AccessK...

    CODING 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<