產品文檔 > 智能風控 > 無感驗證

無感驗證

一、產品簡介

頂象無感驗證結合了設備指紋、行為特征、訪問頻率、地理位置等多項技術,有效的攔截惡意登錄、批量注冊,阻斷機器操作,攔截非正常用戶,較傳統驗證碼相比,用戶無需再經過思考或輸入操作,只需輕輕一滑即可進行驗證。經過智能鑒別為正常的用戶,在一定時間內無需再進行滑動操作,既為企業提供了安全保障也讓用戶無感知通過,極大提升用戶體驗。

1.1 產品特點

  • 精準識別:機器學習結合智能策略模型,精準判定人機操作
  • 極致體驗:依托頂象先進架構,服務毫秒級響應
  • 布局美觀:彈窗、嵌入等多種形態,適用于各種業務場景,覆蓋電腦、手機全平臺
  • 快速接入:SDK快速接入,僅需三步輕松搞定
  • 數據可視化:豐富的可視化圖表,防御攔截數據盡收眼底

1.2 產品安全性

頂象無感驗證服務是基于北京頂象技術大數據風控體系提供的智能人機識別產品,依托頂象強大的技術研發和十余年的安全防控經驗,頂象安全大腦可以在大數據海洋中精確定位各類異常操作,實時決策,并從海量真人操作中學習,不斷進化識別能力,并已廣泛應用于金融、通訊、IoT、電商、互聯網等行業。

二、應用場景

無感驗證產品主要可應用于任何需要驗證的應用場景。包括并不限于如下場景:

  • 賬號類場景:用戶注冊、登錄、修改郵箱、修改手機號、修改密碼等業務場景;
  • 活動類場景:紅包福利領取、競猜答題、積分兌換、團購搶購等運營性質的業務場景;
  • UGC類場景:發帖、回復、點贊、上傳圖片等用戶自身創造內容業務場景;
  • 輔助驗證類場景:發送短信驗證碼、發送郵箱驗證碼等觸發某種驗證業務場景;

三、使用指南

3.1 服務接入流程

服務接入流程

3.2 開發前必讀

  • 針對需要保護的業務接口,在頁面上嵌入無感驗證,用戶滑動成功后會得到一個安全token,業務接口需要帶著token到后臺進行token安全驗證,驗證通過以后再繼續業務流程。

  • 以登錄為例,未接入驗證碼前的業務接口:
    接口:http://domain/login 參數:用戶名,密碼

  • 現在在登錄頁面接入驗證碼,用戶滑動以后,會得到一個安全token
    接入后的業務接口: 接口:http://domain/login 參數:用戶名,密碼,安全token

四、無感驗證后端接入(業務應用集成)

  • 訪問頂象官網,注冊賬號后登錄控制臺,訪問“無感驗證”模塊,申請開通后系統會分配一個唯一的AppId、AppSecret。

  • 當用戶滑動驗證碼通過后,驗證碼服務會生成一個token,用戶的業務請求帶上這個驗證碼token,業務系統再調用后臺 SDK 驗證token的有效性。

______________________________________             _______________________________          _________________________
|                                    |            |                               |         |                       |
|          用戶業務請求                |   ---->    |             業務系統           |  ---->  |        驗證碼服務       |
|      (請求帶上驗證碼token)           |            |   (獲取token,調用驗證碼接口)     |         |     (校驗token有效性)   |
|____________________________________|            |_______________________________|         |_______________________|

頂象提供后端SDK來校驗token是否合法 ,目前支持JAVA版、PHP版、C#版、Python版。

token驗證api返回數據
字段名數據類型描述
successBoolean是否成功,true/false
msgString錯誤信息
ipStringtoken產生時,客戶端的ip
codeString錯誤code
錯誤code說明
code描述
1001錯誤的APPID
1002簽名錯誤,請核對APPID和APPSECRET是否正確
1003token不合法或者已經過期(token是一次性使用并且只有兩分鐘有效期)
1004參數錯誤,請核對后端使用的APPID是否和前端頁面一致
1005verifyToken傳入ip時,校驗不通過,即token產生的ip和業務請求ip不一致

4.1 SDK-JAVA版

  • JAVA7及以上版本SDK下載 點擊下載 ,如需其他版本SDK請聯系官網在線客服。

  • maven項目引入依賴

    <dependency>
      <groupId>com.dingxiang-inc</groupId>
      <artifactId>ctu-client-sdk</artifactId>
      <version>2.1</version>
    </dependency>
  • 當用戶滑動驗證碼通過后,驗證碼服務會生成一個token,用戶的業務請求帶上這個驗證碼token,業務系統再去請求驗證碼服務驗證token,驗證碼服務會返回token的合法性和采集到的客戶端ip。如果業務系統可以采集提交業務參數的客戶端ip,可以隨token一并提交,驗證碼服務除了校驗token的合法性還會校驗客戶端驗證碼驗證和提交業務參數的ip是否一致。
/**構造入參為appId和appSecret
 * appId和前端驗證碼的appId保持一致,appId可公開
 * appSecret為秘鑰,請勿公開
 * token在前端完成驗證后可以獲取到,隨業務請求發送到后臺,token有效期為兩分鐘
 * ip 可選,提交業務參數的客戶端ip
 **/
String appId = "appId";
String appSecret = "appSecret";
CaptchaClient captchaClient = new CaptchaClient(appId,appSecret);
//captchaClient.setCaptchaUrl(captchaUrl); 
//特殊情況需要額外指定服務器,可以在這個指定,默認情況下不需要設置
CaptchaResponse response = captchaClient.verifyToken(token);
//CaptchaResponse response = captchaClient.verifyToken(token, ip);
//針對一些token冒用的情況,業務方可以采集客戶端ip隨token一起提交到驗證碼服務,驗證碼服務除了判斷token的合法性還會校驗提交業務參數的客戶端ip和驗證碼頒發token的客戶端ip是否一致 
System.out.println(response.getCaptchaStatus());
//確保驗證狀態是SERVER_SUCCESS,SDK中有容錯機制,在網絡出現異常的情況會返回通過
//System.out.println(response.getIp());
//驗證碼服務采集到的客戶端ip
if (response.getResult()) {
    /**token驗證通過,繼續其他流程**/
} else {
    /**token驗證失敗,業務系統可以直接阻斷該次請求或者繼續彈驗證碼**/
}

4.2 SDK-PHP版

include ("CaptchaClient.php");
/**構造入參為appId和appSecret
 * appId和前端驗證碼的appId保持一致,appId可公開
 * appSecret為秘鑰,請勿公開
 * token在前端完成驗證后可以獲取到,隨業務請求發送到后臺,token有效期為兩分鐘**/
$appId = "appId";
$appSecret = "appSecret";
$client = new CaptchaClient($appId,$appSecret);
$client->setTimeOut(2);      //設置超時時間,默認2秒
# $client->setCaptchaUrl("http://cap.dingxiang-inc.com/api/tokenVerify");   
//特殊情況可以額外指定服務器,默認情況下不需要設置
$response = $client->verifyToken("token");  //token指的是前端傳遞的值,即驗證碼驗證成功頒發的token
echo $response->serverStatus;
//確保驗證狀態是SERVER_SUCCESS,SDK中有容錯機制,在網絡出現異常的情況會返回通過
if($response->result){
    echo "true";
    /**token驗證通過,繼續其他流程**/
}else{
    echo "false";
    /**token驗證失敗**/
}

4.3 SDK-C#版

// 依賴 .NET Framework 4.0 
// 在您的項目中添加DxCsharpSDK.dll引用
String appId = "appId";
String appSecret = "appSecret";
DxCsharpSDK.Captcha captcha = new DxCsharpSDK.Captcha(appId,appSecret);
//captcha.SetCaptchaUrl("http://cap.dingxiang-inc.com/api/tokenVerify");
//特殊情況需要額外指定服務器,可以在這個指定,默認情況下不需要設置
//captcha.SetTimeOut(2000);
//設置超時時間,單位毫秒,默認2秒
DxCsharpSDK.CaptchaResponse response = captcha.VerifyToken("token");
Response.Write(response.captchaStatus);
//確保驗證狀態是SERVER_SUCCESS,SDK中有容錯機制,在網絡出現異常的情況會返回通過
if (response.result) {
    /**token驗證通過,繼續其他流程**/
} else {
    /**token驗證失敗,業務系統可以直接阻斷該次請求或者繼續彈驗證碼**/
} 

4.4 SDK-Python版

from CaptchaClient import CaptchaClient

class TokenDemo:
    def __init__(self):
        pass

    APP_ID = '12610axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
    APP_SECRET = 'a3e56cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

if __name__ == '__main__':
    captchaClient = CaptchaClient(APP_ID, APP_SECRET)
    captchaClient.setTimeOut(2)
    # 設置超時時間,默認2秒
    # captchaClient.setCaptchaUrl("http://cap.dingxiang-inc.com/api/tokenVerify")
    # 特殊情況可以額外指定服務器,默認情況下不需要設置
    response = captchaClient.checkToken("token")
    print response['serverStatus']
    #確保驗證狀態是SERVER_SUCCESS,SDK中有容錯機制,在網絡出現異常的情況會返回通過
    print response['result']
    if response['result']:
        # token驗證通過,繼續其他流程
        pass
    else:
        # token驗證失敗,業務系統可以直接阻斷該次請求或者繼續彈驗證碼
        pass

4.5 SDK-NODEJS版

npm install dx-captcha-sdk --save
const CaptchaSDK = require('dx-captcha-sdk')

const sdk = new CaptchaSDK('您的appId', '您的appSecret')

sdk.verifyToken('驗證碼token').then(() => {
  console.log('驗證成功')
}).catch(err => {
  console.log('驗證失敗')
})

設置超時時間

sdk.verifyToken('驗證碼token', 5 * 1000)

設置驗證地址

sdk.setCaptchaUrl('驗證地址')

五、無感驗證前端接入

  • 訪問頂象官網,注冊賬號后登錄控制臺,訪問“無感驗證”模塊,申請開通后系統會分配一個唯一的AppId、AppSecret。

  • Web接入,兼容IE8+,Chrome,Firefox,360瀏覽器,QQ瀏覽器等主流瀏覽器,接入方法請見Web接入章節。

  • Android接入,兼容Android4.0以上,接入方法及SDK下載地址請見Android接入章節。

  • iOS接入,兼容iOS8.0以上,接入方法及SDK下載地址請見iOS接入章節。

5.1 Web接入

環境要求

兼容IE8+,Chrome,Firefox,360瀏覽器,QQ瀏覽器等主流瀏覽器。

獲取appId

請先進入頂象控制臺(或點擊右上角登陸按鈕)中的“應用管理”或“應用配置”模塊,并下圖指引位置找到appId。 appid2.png

2ED44E7E-E125-49A6-89EB-2411CBE98BB7.png

引入 JS

<script src="https://cdn.dingxiang-inc.com/ctu-group/captcha-ui/index.js"></script>

注意:由于驗證碼 JS 會不定期升級更新,請直接引用頂象 CDN 上的資源,以便及時獲得最新安全防護。不要將 JS 文件下載到自己服務器使用。

初始化

假設頁面上有一個 <div id="c1"></div>,則可以像下面這樣初始化驗證碼:

var myCaptcha = _dx.Captcha(document.getElementById('c1'), {
    appId: 'appId', //appId,在控制臺中“應用管理”或“應用配置”模塊獲取
    success: function (token) {
      // console.log('token:', token)
    }
})

初始化完成后,驗證碼組件會被插入到 <div id="c1"></div> 中。

外觀和尺寸

滑動驗證碼一共有四種樣式(style),分別為:

  • embed 嵌入式(默認),這種樣式下寬度默認為 300px,可通過初始化時的 width 參數調節,高度為 200px,高度不可調節
  • inline 內聯式,這種樣式占用面積較小,寬度默認為 300px,可通過初始化時的 width 參數調節,高度為 40px,高度不可調節
  • popup 彈出式,這種樣式驗證碼默認不可見,調用 .show() 方法后將以浮層的形式展現,寬度為 300px,高度為 200px
  • oneclick 觸發式,這種樣式占用面積較小,寬度默認為 300px,可通過初始化時的 width 參數調節,高度為 40px,高度不可調節

更多細節,可見 參數 章節。

5.2 Android接入

(v1.5.x)

環境要求

條目說明
開發目標Android 4.0+
開發環境Android Studio 3.0.1 或者 Eclipse + ADT
CPU架構ARM 或者 x86
SDK三方依賴

法規要求

根據《工業和信息化部 337號令》的規定,重點對以下四個方面開展規范整治工作。
(一)違規收集用戶個人信息方面
(二)違規使用用戶個人信息方面
(三)不合理索取用戶權限方面
(四)為用戶賬號注銷設置障礙方面
法規地址:http://miit.gov.cn/n1146295/n1652858/n1652930/n3757020/c7506353/content.html

其中SDK涉及到第一條:收集個人信息(包括唯一設備識別碼、網絡設備硬件地址等信息)。
法規規定,所采集的數據項目需在隱私政策中明確聲明,在客戶不同意隱私政策的情況下,不允許進行采集。且申請授權需與場景相關,請根據實際情況做出合理調整。

解決方式

需要客戶在集成了SDK的app中增加《隱私政策聲明》,來規避風險。并在客戶同意隱私政策后,進行sdk的調用。

隱私政策(擬,可根據實際情況進行修改)

為了識別設備/賬號異常狀態,我們將會接受并記錄您所使用的設備相關信息(包括設備型號、操作系統、設備設置、唯一設備標識符(IMEI碼)、網絡設備硬件地址(MAC)、設備環境等軟硬件特征信息,設備所在位置相關信息(包括您授權的GPS位置以及WLAN接入點、藍牙和基站等信息)

集成SDK

導入依賴
Android Studio 集成
  • 把aar, jar, so文件集成到項目對應的libs下(x.x.x表示為sdk版本號)

  • 把assets里的文件集成到項目的assets里(必須集成,否則會影響運行)

  • 點擊下載Demo(僅做代碼配置演示使用,其中appId請在頂象后臺申請,SDK需要替換為鏈接中下載的SDK)

  • 點擊下載React Native 接入文檔

  • 點擊下載React Native Demo(僅做代碼配置演示使用,其中appId請在頂象后臺申請,SDK需要替換為鏈接中下載的SDK)

captcha.png

  • 在該Module的build.gradle中如下配置:
android {

  sourceSets {
    main {
      jniLibs.srcDirs = ['libs']
    }
  }

  packagingOptions {
    doNotStrip "**/libDX*.so"
  }
}

repositories{
    flatDir{
        dirs 'libs'
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation (name:'dx-captcha-x.x.x', ext:'aar')
}
添加SDK所需權限
<!-- 必選-默認申請 -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>

<!-- 可選-6.0或以上需動態申請 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
如果有使用Proguard混淆,請添加如下配置,保證SDK的相關代碼不被混淆:
-keep class com.dingxiang.mobile.captcha.**{*;}
-keep class org.json.**{*;}

-dontwarn com.dingxiang.mobile.**
-dontwarn *.com.dingxiang.mobile.**
-dontwarn *.com.mobile.strenc.**
-keep class com.dingxiang.mobile.risk.**{*;}
-keep class com.security.inner.**{*;}
-keep class *.com.dingxiang.mobile.**{*;}
-keep class *.com.mobile.strenc.**{*;}
}

初始化

  • xml方式接入無感驗證組件
<com.dingxiang.mobile.captcha.DXCaptchaView
    android:id="@+id/dxCaptcha"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
  • 初始化,需傳appId
DXCaptchaView dxCaptcha = (DXCaptchaView) findViewById(R.id.dxVCodeView);
dxCaptcha.init(appId);
  • 自定義配置(可選)
Map<String, Object> config = new HashMap<String, Object>();

// 二級屬性
Map<String, Object> customStyle = new HashMap<String, Object>();
customStyle.put("bgColor", "#FFFFFF");

// 二級屬性
Map<String, Object> customLanguage = new HashMap<String, Object>();
customLanguage.put("init_inform", "shwo_拖動一下");

// 一級屬性
config.put("customStyle", customStyle);
config.put("customLanguage", customLanguage);
config.put("language", "en");

// 是否開啟無感驗證,默認為開啟狀態
config.put("cacheStorage", true);                          

// 私有化配置參數,這部分參數通常而言不需要設置,除非你確切知道它們的含義。
config.put("apiServer", "http://ip:port");                 // 私有化必填,私有化服務器地址
config.put("ua_js", "http://ip:port/xxxxxx/greenseer.js"); // 私有化選填,自定義ua腳本地址
config.put("captchaJS", "http://ip:port/xxxxxx/index.js"); // 私有化選填,自定義無感驗證js地址
config.put("keyURL", "http://ip:port/udid/m1");            // 私有化選填,自定義設備指紋地址
config.put("keyBackup", true);                             // 私有化選填,設備指紋數據線上備份

dxCaptcha.initConfig(config);
  • 開始加載“無感驗證”組件

    dxCaptcha.startToLoad(new DXCaptchaListener() {
    
      @Override
      public void handleEvent(View view, DXCaptchaEvent event, Map<String, String> args) {
    
          switch(event) {
              case DXCAPTCHA_SUCCESS: // 驗證成功的回調
                  String token = args.get("token"); // 成功時會傳遞token參數
                  Log.i(TAG, "Verify Success. token: " + token);
                  break;
              case DXCAPTCHA_FAIL:      // 驗證失敗回調
                  Log.i(TAG, "Verify Failed.");
                  break;
              default:
                  break;
          }
      }
    });
  • 使用結束,調用destory方法釋放資源

dxCaptcha.destory();
參數說明

初始化有若干參數,詳情可查閱 參數

其中在 Android SDK

  • style 固定為 embed ,若指定為其他值會被忽略
  • width 參數會被忽略,實際值會根據 frame 進行自適應調整
  • successfail 回調參數會被忽略,請在 delegate 中處理回調
  • constID_jsconstIDServerconstID_options 配置不生效
事件說明

回調的事件類型

DXCAPTCHA_RENDER
DXCAPTCHA_BEFORE_RENDER
DXCAPTCHA_AFTER_RENDER

DXCAPTCHA_READY
DXCAPTCHA_BEFORE_READY
DXCAPTCHA_AFTER_READY

DXCAPTCHA_LOADFAIL
DXCAPTCHA_BEFORE_LOADFAIL
DXCAPTCHA_AFTER_LOADFAIL

DXCAPTCHA_DRAGSTART
DXCAPTCHA_BEFORE_DRAGSTART
DXCAPTCHA_AFTER_DRAGSTART

DXCAPTCHA_DRAGEND
DXCAPTCHA_BEFORE_DRAGEND
DXCAPTCHA_AFTER_DRAGEND

DXCAPTCHA_VERIFY
DXCAPTCHA_BEFORE_VERIFY
DXCAPTCHA_AFTER_VERIFY

DXCAPTCHA_VERIFYDONE
DXCAPTCHA_BEFORE_VERIFYDONE
DXCAPTCHA_AFTER_VERIFYDONE

DXCAPTCHA_VERIFYSUCCESS
DXCAPTCHA_BEFORE_VERIFYSUCCESS
DXCAPTCHA_AFTER_VERIFYSUCCESS

DXCAPTCHA_VERIFYFAIL
DXCAPTCHA_BEFORE_VERIFYFAIL
DXCAPTCHA_AFTER_VERIFYFAIL

DXCAPTCHA_PASSBYSERVER
DXCAPTCHA_BEFORE_PASSBYSERVER
DXCAPTCHA_AFTER_PASSBYSERVER

DXCAPTCHA_SUCCESS
DXCAPTCHA_FAIL

  • Android SDK 中不觸發 dragging 事件
  • Android SDK 中不觸發 show/hide 系列的事件

5.3 iOS 接入

(v1.5.x)


Apple Store上架請特別注意(集成SDK的第4節)

環境要求

條目說明
兼容平臺iOS 8.0+
開發環境XCode 4.0 +
CPU架構armv7, arm64, i386, x86_64
SDK依賴libz, libresolv, libc++ , SystemConfiguration.framework , CoreLocation.framework , CoreTelephony.framework

集成SDK

1、集成無感驗證,需要同時集成風控SDK5.0.0或以上版本(如項目本身已接入頂象風控且確認版本無誤則可直接跳過此步),下載頂象風控 dx-risk SDK ,解壓得以下幾個文件

  • dx-risk-iOS-x.x.x-xxxxxxx目錄 DXRisk sdk
    • DXRisk.framework 不帶idfa獲取邏輯的Dynamic Library Framework
    • DXRiskWithIDFA.framework 帶idfa獲取邏輯的Dynamic Library Framework
    • DXRiskStatic.framework 不帶idfa獲取邏輯的Static Library Framework
    • DXRiskStaticWithIDFA.framework 帶idfa獲取邏輯的Static Library Framework

若在項目中添加DXRisk.framework或者DXRiskWithIDFA.framework其中之一,選擇Target -> General,在Embedded Binaries里點擊加號,添加DXRisk.frameworkDXRiskWithIDFA.framework

若在項目中添加DXRiskStatic.framework或者DXRiskStaticWithIDFA.framework其中之一,需要在Build Settings -> Other Linker Flags 設置 -ObjC 如下圖:

4A23453213E696EC12C2AE2A1070EA0C.jpg

2、下載頂象無感驗證 dx-captcha SDK ,解壓得到 DXCaptchaSDK 文件夾,內含以下文件

  • DXCaptchaSDK CaptchaFramework
    • DingxiangCaptcha.bundle 無感驗證資源包
    • DingxiangCaptchaSDK.framework Dynamic Library Framework
    • DingxiangCaptchaSDKStatic.framework Static Library Framework
  • DXCaptchaDemo 集成demo

3、將 DingxiangCaptchaSDK.framework 或者 DingxiangCaptchaSDKStatic.framework 文件夾拖入工程根目錄,若添加DingxiangCaptchaSDK.framework 則在項目中添加DingxiangCaptchaSDK.framework,選擇Target -> General,在Embedded Binaries里點擊加號,添加DingxiangCaptchaSDK.framework , 并添加DingxiangCaptcha.bundle 相應的資源至項目中

  • 點擊下載React Native demo(僅做代碼配置演示使用,其中appId請在頂象后臺申請,SDK需要替換為鏈接中下載的SDK)

4、配置打包腳本

以下的操作僅限導入DingxiangCaptchaSDK.framework動態庫

此步驟主要是解決上傳Store架構不符合的問題,如項目中已配置過Carthage或有其他相關的打包Framework調整腳本,可略過此步自行調整 選擇Target -> Build Phases,點擊+按鈕,選擇New Run Script Phase, 添加如下腳本:


APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"

# This script loops through the frameworks embedded in the application and
# removes unused architectures.
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"

EXTRACTED_ARCHS=()

for ARCH in $ARCHS
do
echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
done

echo "Merging extracted architectures: ${ARCHS}"
lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
rm "${EXTRACTED_ARCHS[@]}"

echo "Replacing original executable with thinned version"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"

done

初始化

假設在 ViewController 中添加無感驗證,首先引入頭文件

#import <DingxiangCaptchaSDK/DXCaptchaView.h>
#import <DingxiangCaptchaSDK/DXCaptchaDelegate.h>

然后實現 DXCaptchaDelegate 協議中的 captchaView:didReceiveEvent:arg: 方法,以接收驗證結果回調

@interface ViewController () <DXCaptchaDelegate>

@end

@implementation ViewController

- (void) captchaView:(DXCaptchaView *)view didReceiveEvent:(DXCaptchaEventType)eventType arg:(NSDictionary *)dict {
    switch(eventType) {
        case DXCaptchaEventSuccess: { // 驗證成功的回調
            NSString *token = dict[@"token"]; // 成功時會傳入token參數
            [[[UIAlertView alloc]initWithTitle:@"Verify Success" message:token delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
            break;
        }
        case DXCaptchaEventFail: // 驗證失敗的回調
            [[[UIAlertView alloc]initWithTitle:@"Verify Failed" message:@"DXCaptcha Verify Failed!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
            break;
        default:
            break;
    }
}

@end

最后創建無感驗證組件,需要傳入 appIddelegate(驗證回調的代理), frame(位置及尺寸)

CGRect frame = CGRectMake(self.view.center.x - 150, self.view.center.y - 100, 300, 200);
DXCaptchaView *captchaView = [[DXCaptchaView alloc] initWithAppId:@"your appId" delegate:self frame:frame];
[self.view addSubview:captchaView];

如果除 appId 以外還需要配置其他的初始化參數,可調用 initWithConfig:delegate:frame 接口,如

NSDictionary *config = @{@"appId": @"your appId", @"language": @"en"};
NSDictionary *customLanguageConfig = @{@"pass_by_server": @"驗證成功"}; //可設置參數參考文檔
[config setObject:customLanguageConfig forKey:@"customLanguage"];
DXCaptchaView *captchaView = [[DXCaptchaView alloc] initWithConfig:config delegate:self frame:frame];

私有化配置參數示例代碼,apiServer為必填項,ua_js、captchaJS、keyURL、keyBackup如需手動設置請咨詢私有化部屬的同學

    NSMutableDictionary *config = [NSMutableDictionary dictionary];
    //私有化參數配置
    [config setObject:@"your appId" forKey:@"appId"];
    [config setObject:@"your apiServer" forKey:@"apiServer"];
    [config setObject:@"your ua_js" forKey:@"ua_js"];
    [config setObject:@"your captchaJS" forKey:@"captchaJS"];
    [config setObject:@NO forKey:@"isSaaS"];
    //設備指紋私有化服務器地址
    [config setObject:@"your riskServerAddress" forKey:@"keyURL"];
    //設備指紋私有化數據備份
    [config setObject:@YES forKey:@"keyBackup"];

    DXCaptchaView *captchaView = [[DXCaptchaView alloc] initWithConfig:config delegate:self frame:frame];

參數說明

初始化有若干參數,詳情可查閱 參數

其中在 iOS SDK

  • style 固定為 embed ,若指定為其他值會被忽略
  • width 參數會被忽略,實際值會根據 frame 進行自適應調整,建議尺寸為300x200
  • successfail 回調參數會被忽略,請在 delegate 中處理回調
  • constID_jsconstIDServerconstID_options 配置不生效
  • 增加 userId 參數,用于傳遞給 ConstID 模塊作用戶標識
  • 增加 captchaJS 參數,用于設置私有化驗證碼腳本
  • 增加 keyBackup 參數,用于設置是否備份設備指紋私有化
  • 增加 keyURL 參數,用于設置設備指紋私有化服務器地址

事件說明

回調的事件類型,請查閱 事件DXCaptchaDelegate.h 頭文件

iOS SDK 中不觸發 show/hide 系列的事件。如SDK無效且運行過程中出現NOT FOUND DXRISK-SDK日志,請檢查是否遺漏頂象風控SDK的集成

5.4 小程序接入

5.4.1、插件式接入

1)添加插件

用管理員身份登錄微信公眾平臺,請使用需要接入小程序的相關賬號(微信公眾平臺采用不同賬號區分,公眾號的后臺和小程序的后臺分別為不同賬號),依次點擊:設置-第三方服務-添加插件,然后輸入關鍵字“頂象”并搜索,如下圖所示: 屏幕快照 2018-10-16 下午3.17.25.png

2)獲取密鑰

未注冊用戶可在頂象官網進行賬號注冊,創建應用獲取應用密鑰AppID和AppSecret。

3)集成插件

聲明插件:在app.json中聲明插件

{
  "plugins": {
    "captcha": {
      "version": "1.2.1",
      "provider": "wxbf8483dfc5ac6817"
    }
  }
}

在頁面.json中引入自定義組件

{
  "usingComponents": {
    "basic": "plugin://captcha/basic",
    "oneclick": "plugin://captcha/oneclick",
  }
}
4)使用插件

一、點擊式

在頁面.wxml中使用插件

<oneclick bindsuccess='captchaSuccess' bindhide='captchaHide' oneclickReload='{{captchaReload}}' captchaShow='{{captchaShow}}' options='{{options}}'/>
<button bindtap='login'>登陸</button>

在頁面.js中監聽事件

Page({
  data: {
    options: {
        appId: '這里填寫你在頂象官網申請到的appId',
        style: 'oneclick'
    },
    captchaShow: false,
    captchaReload: false
  },

  login: function () {
    // captchaReload用來重置驗證碼
    this.setData({
      captchaReload: true
    })
  },

  // 驗證碼成功回調
  captchaSuccess: function (token) {
    console.log('token:', token)
  },

  // 驗證碼關閉回調
  captchaHide: function () {
    console.log('captcha_hide')
       this.setData({
         captchaShow: false
    })
  }
})

二、彈出式 在頁面.wxml中使用插件

<basic bindsuccess='captchaSuccess' bindhide='captchaHide' captchaReload='{{captchaReload}}' captchaShow='{{captchaShow}}' options='{{options}}'/>
<button bindtap='login'>登陸</button>

在頁面.js中監聽事件

Page({
  data: {
    options: {
        appId: '這里填寫你在頂象官網申請到的appId',
        style: 'popup'
    },
    captchaShow: false,
    captchaReload: false // 此參數用于重置驗證碼
  },

  login: function () {
    // captchaShow用來彈出驗證碼
    this.setData({
      captchaShow: true
    })
  },

  // 驗證碼成功回調
  captchaSuccess: function (token) {
    console.log('token:', token)
  },

  // 驗證碼關閉回調
  captchaHide: function () {
    console.log('captcha_hide')
    this.setData({
         captchaShow: false
    })
  }
})

5.4.2、跳轉式接入

1)關聯小程序

用管理員身份登錄微信公眾平臺,請使用需要公眾號的相關賬號(微信公眾平臺采用不同賬號區分,公眾號的后臺和小程序的后臺分別為不同賬號),依次點擊:小程序-小程序管理-添加-關聯小程序,然后輸入小程序AppID“wx82db4a59175bdfdf”并搜索,如下圖所示:

屏幕快照 2018-09-26 下午3.34.29.png

輸入APPID搜索頂象小程序.png

2)獲取密鑰

未注冊用戶可在頂象官網進行賬號注冊,創建應用獲取應用密鑰AppID和AppSecret。

3)小程序集成
  1. 通過navigator組件跳轉至頂象驗證碼。
    .wxml
    <navigator target="miniProgram"
    app-id="wx82db4a59175bdfdf"
    path="/pages/captcha/captcha"
    extra-data="{{options}}">
     <button>登陸</button>
    </navigator>
    .js
    Page({
       data: {
         options: {
           appId: '這里填寫在頂象官網申請到的appId',
           customStyle: {
             panelBg: '',
             captchaBgColor: ''
           }
         }
       }
    })

參數說明:

參數說明
appIdString這里填寫在頂象官網申請到的appId,注意必須填寫正確,否則會報:功能無法使用
customStyleObject自定義樣式對象,panelBg為整個頁面的background屬性,captchaBgColor為驗證碼的background-color屬性
  1. 在頂象驗證碼中驗證

驗證圖片

  1. 驗證成功后,驗證結果會在調用方app.js中頂onShow生命周期方法中取到。
    if (options.scene === 1038 && options.referrerInfo.appId === 'wx82db4a59175bdfdf') {
       const result = options.referrerInfo.extraData;
       if (result) {
         console.log('返回結果:', result)
       } else {
         // 用戶點擊右上角關閉了驗證碼
       }
    }

驗證結果說明:

參數說明
successBoolean驗證成功失敗
tokenString驗證成功才有:token
msgString驗證失敗或參數不合法才有:錯誤信息

5.5 參數

常規參數

初始化時有若干參數,其中 appId 是必填的。

參數名必填類型說明
appIdString當前應用的唯一標識
typeString類型,目前只有一個選項 basic,默認值為 basic
styleString樣式,可選項有 embed(默認)、inlinepopuponeclick 四種,具體效果可參見線上demo
inlineFloatPositionString浮動層位置,僅當 style 的值為 inline 時有效,可選項有 up(默認)、down 兩種,具體效果可參見線上demo
oneClickFloatPositionstring浮動層位置,僅當 style 的值為 oneclick 時有效,可選項有 up,當style值為oneclick且不傳此參數,默認為彈出形式。
widthNumber控件(滑動條)寬度,單位為像素,默認為 300
languageString語言,可選項有 cn(默認,中文)、en(英文)。
successFunction驗證成功時的回調函數,會傳入一個參數,值為本次驗證的 token:constId,接入方需在后續的驗證中傳回此項值。注:此回調函數包含無感驗證成功及滑動驗證成功。
failFunction驗證失敗時的回調函數,會傳入一個參數,值為出錯信息。

個性化參數

這部分參數可以控制一些自定義信息。

參數名必填類型說明
customStyleObject自定義樣式,詳情參見自定義樣式說明
customLanguageObject自定義語言,詳情參見自定義語言說明

高級參數

這部分參數通常而言不需要設置,除非你確切知道它們的含義。

參數名必填類型說明
ua_jsString自定義 ua 腳本地址,格式形如 https://cdn.dingxiang-inc.com/ctu-group/ctu-greenseer/greenseer.js
constID_jsString自定義 constID 腳本地址,格式形如 https://cdn.dingxiang-inc.com/ctu-group/constid-js/index.js
constIDServerString自定義 constID 服務地址,格式形如 http://constid.dingxiang-inc.com/udid/c.png
apiServerString自定義 API 服務地址,格式形如 http://123.207.220.181:9090https://api.dingxiang-inc.com
protocolString請求協議,可選項有 http:https:,默認為 https:
timeoutNumber超時時間,單位為毫秒,默認值為 6000。注意,只有部分請求可設置超時時間。
constID_optionsObjectconstID 初始化配置參數,參見 ConstID 文檔,如此項中的參數與外部參數沖突(比如其中也定義了 appId 且與外部的 appId 不同,則以此處的為準。

5.6 基礎類型

初始化時,如果省略 type 參數,或傳入的值為 basic,則啟用基礎類型驗證碼。

例:

var myCaptcha = _dx.Captcha(document.getElementById('c1'), {
    appId: 'appId',
    type: 'basic', // <-- 指定為"基礎類型",此參數可省略
    style: 'embed', // 可省略
    width: 300 // 可省略
})

參數說明亦可參考參數。

5.7 方法

驗證碼實例具備以下方法:

  • reload() 重置當前驗證碼

    示例:

     myCaptcha.reload()
  • show() 顯示當前驗證碼。

    stylepopup 的驗證碼默認是隱藏的,需要接入方根據頁面邏輯調用 show() 方法將其顯示。

    示例:

     myCaptcha.show()
  • hide() 隱藏當前驗證碼

    示例:

     myCaptcha.hide()

5.8 事件

驗證碼可以使用以下方式監聽事件:

myCaptcha.on('ready', function () {
  // console.log('captcha is ready!')
})

myCaptcha.on('verifySuccess', function (security_code) {
  // 說明:security_code = token + ':' + constID
  // console.log('security_code is: ' + security_code)
})

myCaptcha.on('hide', function () {
  // console.log('驗證碼控件被隱藏了。')
})

基礎類型的驗證碼支持以下事件:

初始化階段

驗證碼在初始化階段按順序觸發以下事件:

事件名說明
render渲染事件,驗證碼開始渲染時觸發
passByServer【無感驗證】通過,服務端判定本次驗證可直接通過,無需用戶交互。如果此事件觸發,則驗證碼直接顯示為驗證通過狀態,將沒有后面的用戶交互階段。此事件帶一個參數 token
ready驗證碼準備就緒,可以接受用戶輸入時觸發。注意:【無感驗證】通過則不會觸發此事件,直接進入passByServer事件

如果加載失敗,則會按順序觸發以下事件:

事件名說明
render渲染事件,驗證碼開始渲染時觸發
loadFail加載失敗時觸發

用戶交互階段

事件名說明
dragStart用戶開始拖動滑塊
dragging用戶拖動滑塊過程中多次觸發
dragEnd用戶釋放滑塊,結束拖動
verify向校驗接口提交數據進行校驗
verifyDone校驗接口已返回數據
verifySuccess校驗接口已返回數據,且結果為成功,此事件帶一個參數 token
verifyFail校驗接口已返回數據,且結果為失敗

其他事件

事件名說明
show驗證碼控件顯示時觸發
hide驗證碼控件隱藏時觸發

其他

說明:所有事件,都有對應的 before_* 事件和 after_* 事件,分別在該事件之前和之后觸發。

例如 load 事件對應三個事件:before_loadloadafter_load

5.9 自定義樣式

如果你熟悉 CSS,你可以直接編寫自己的 CSS 來覆蓋驗證碼組件的樣式。或者也可以在驗證碼初始化時傳入一個 customStyle 參數,對某些樣式進行自定義。

示例

  var appId = '【你的 appID】'
  var demo_1 = _dx.Captcha(document.getElementById('demo'), {
    appId: appId,

    // 下面開始自定義樣式
    customStyle: {
      bgColor: '#cccc00' // <-- 自定義控件背景色
    },

    success: function (token) {
      window.console && console.log('success, token:', token)
    }
  })

參數詳情

customStyle 目前支持以下參數,所有參數都是可選的:

參數類型說明
bgColorString控件背景色,CSS 顏色格式,例如 #ff0000rgb(255, 0, 0)

5.10 自定義語言

頂象驗證碼自帶中文、英文兩種語言,如果你需要自定義語言,或者只是調整現有語言的某句文案,則可以在初始化時傳入 customLanguage 參數,對語言進行自定義。

示例

  var appId = '【你的 appID】'
  var demo_1 = _dx.Captcha(document.getElementById('demo'), {
    appId: appId,

    // 下面開始自定義語言
    customLanguage: {
      init_inform: '拖動一下', // <-- 初始化時的提示文案
      slide_inform: '向右向右' // <-- 滑塊中的提示文案
    },

    success: function (token) {
      window.console && console.log('success, token:', token)
    }
  })

參數詳情

customLanguage 目前包含以下語句:

語句名默認值(參考值)
init_inform拖動下方的滑塊
load_fail加載失敗,<a href="#">請重試</a>!
loading加載中...
pass_by_server頂象無感驗證成功
slide_inform請向右拖動滑塊完成驗證
smart_checking智能檢測中
verify_success驗證成功
verify_fail驗證失敗
verifying驗證中……

六、常見問題

1.業務系統怎樣和滑動驗證碼結合?

  • 針對需要保護的業務接口,在頁面上嵌入滑動驗證碼,用戶滑動成功后會得到一個安全token,業務接口需要帶著token到后臺進行token安全驗證,驗證通過以后再繼續業務流程。

  • 以登錄為例,未接入驗證碼前的業務接口:
    接口:http://domain/login 參數:用戶名,密碼

  • 現在在登錄頁面接入驗證碼,用戶滑動以后,會得到一個安全token
    接入后的業務接口: 接口:http://domain/login 參數:用戶名,密碼,安全token

2. 頂象無感驗證服務是否收費?

  • 目前頂象驗證碼服務可免費試用,如果所需驗證碼調用量達到一定的數量,或需定制自己Logo、背景圖片,我們將按照不同量的標準收費。具體收費請咨詢頂象官網在線客服。

3. 相對于同類產品,頂象的優勢在哪?

  • 依托頂象強大的技術研發和十余年的安全防控經驗,頂象安全大腦可以在大數據海洋中精確定位各類異常操作,實時決策,并從海量真人操作中學習,不斷進化識別能力;
  • 目前頂象的客戶已遍布金融、通訊、IoT、電商、互聯網等行業;
  • 頂象無感驗證還具備快速接入、極致體驗、豐富報表等特點。

4.無感驗證服務支持哪些瀏覽器版本?

  • IE8+,Chrome,Firefox,360瀏覽器,QQ瀏覽器等主流瀏覽器。

5.在使用或開發過程中遇到問題,是否有技術支持?

  • 是的,本著客戶第一的原則,有問題您可以隨時咨詢頂象官網的在線客服,我們將竭誠為您解答。

6.智能無感模式和強校驗模式有什么區別?

  • 智能無感模式:系統會根據采集的環境設備信息向服務端進行無感模型校驗,通常包括設備模型偵測(檢測是否為模擬器或者存在惡意信息篡改等)、異常關聯偵測(檢測是否存在異常的關聯,如同設備短時間多IP關聯、短時間多次進行驗證等),若用戶通過無感模型校驗則無需進行滑動驗證即可驗證通過。
  • 強校驗模式: 強制用戶每次通過需要完成驗證方可通過,一般推薦用戶在某些需要高校驗要求的業務環節選擇此模式如注冊、獲取短信驗證碼等環節。
  • 關于模式切換:接入客戶可根據自身實際需求,在應用配置下自主選擇所需的驗證模式。
400-8786-123
QQ在線咨詢
在線咨詢
必威体育 <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>