智能无感验证 您所在的位置:网站首页 拼图无痕 智能无感验证

智能无感验证

2023-07-18 10:32| 来源: 网络整理| 查看: 265

产品介绍简介

顶象智能无感验证结合了设备指纹、行为特征、访问频率、地理位置等多项技术,有效的拦截恶意登录、批量注册,阻断机器操作,拦截非正常用户,较传统验证码相比,用户无需再经过思考或输入操作,只需轻轻一滑即可进行验证。经过智能鉴别为正常的用户,在一定时间内无需再进行滑动操作,既为企业提供了安全保障也让用户无感知通过,极大提升用户体验。

产品特点精准识别:机器学习结合智能策略模型,精准判定人机操作极致体验:依托顶象先进架构,服务毫秒级响应布局美观:弹窗、嵌入等多种形态,适用于各种业务场景,覆盖电脑、手机全平台快速接入:SDK快速接入,仅需三步轻松搞定数据可视化:丰富的可视化图表,防御拦截数据尽收眼底产品安全性

顶象智能无感验证服务是基于北京顶象技术大数据风控体系提供的智能人机识别产品,依托顶象强大的技术研发和十余年的安全防控经验,顶象安全大脑可以在大数据海洋中精确定位各类异常操作,实时决策,并从海量真人操作中学习,不断进化识别能力,并已广泛应用于金融、通讯、IoT、电商、互联网等行业。

应用场景

智能无感验证产品主要可应用于任何需要验证的应用场景。包括并不限于如下场景:

账号类场景:用户注册、登录、修改邮箱、修改手机号、修改密码等业务场景;活动类场景:红包福利领取、竞猜答题、积分兑换、团购抢购等运营性质的业务场景;UGC类场景:发帖、回复、点赞、上传图片等用户自身创造内容业务场景;辅助验证类场景:发送短信验证码、发送邮箱验证码等触发某种验证业务场景;法规要求

根据《工业和信息化部 337号令》的规定,重点对以下四个方面开展规范整治工作。

(一)违规收集用户个人信息方面(二)违规使用用户个人信息方面(三)不合理索取用户权限方面(四)为用户账号注销设置障碍方面

其中SDK涉及到第一条:收集个人信息(包括唯一设备识别码、网络设备硬件地址等信息)。

法规规定,所采集的数据项目需在隐私政策中明确声明,在客户不同意隐私政策的情况下,不允许进行采集。且申请授权需与场景相关,请根据实际情况做出合理调整。

顶象隐私服务条款

https://www.dingxiang-inc.com/about/policy

解决方式

需要客户在集成了SDK的app中增加《隐私政策声明》,来规避风险。并在客户同意隐私政策后,进行sdk的调用。

隐私政策(拟,可根据实际情况进行修改)

为了识别设备/账号异常状态,我们将会接受并记录您所使用的设备相关信息(包括设备型号、操作系统、设备设置、唯一设备标识符(IMEI码)、网络设备硬件地址(MAC)、设备环境等软硬件特征信息,设备所在位置相关信息(包括您授权的GPS位置以及WLAN接入点、蓝牙和基站等信息)

序号功能及服务个人信息类型适用系统版本1将设备信息作为验证码风险防控中一个要素,有效识别风险异常设备,提升验证准确性及成功率设备信息(包括设备操作系统信息、设备厂商信息、设备型号、设备配置信息、AndroidID、IDFA、MAC地址、设备电池状态、越狱状态)iOS及Android2将网络信息作为验证码风险防控中一个要素,有效识别异常网络信息,提升验证准确性及成功率网络信息(包括WIFI状态、WIFI参数、WIFI地址、IP地址、IP代理信息、蓝牙信息、GPS信息、运营商信息)iOS及Android3将验证时的交互轨迹信息作为验证码风险防控中一个要素,作为人机模型验证的判断依据之一滑动轨迹信息(包括用户进行验证时的拖动滑块的轨迹信息、验证码内的点击信息)iOS及Android4采集辅助参数,作为验证中的补充项,提升验证准确性及成功率其他信息(包括APP应用包名、APP应用名、APP应用版本)iOS及Android使用指南服务接入流程

服务接入流程

开发前必读

针对需要保护的业务接口,在页面上嵌入无感验证,用户滑动成功后会得到一个安全凭据(即token),业务接口需要带着凭据到后台进行安全验证,验证通过以后再继续业务流程。

以登录为例,未接入验证码前的业务接口:接口:http://domain/login 参数:用户名,密码

现在在登录页面接入验证码,用户滑动以后,会得到一个安全凭据接入后的业务接口: 接口:http://domain/login 参数:用户名,密码,token

image.png

域名获取

可访问顶象控制台,只要创建过无感验证的应用后系统会自动分配对应的可接入域名(apiServer),可在应用管理界面左上方进行查看如下图所示。并可通过复制按钮可以快速复制,以便在前端接入、后端接入中进行使用。 image.png

客户端集成

访问顶象官网,注册账号后登录控制台,访问“无感验证”模块,申请开通后系统会分配一个唯一的AppId、AppSecret。

Web接入,兼容IE8+,Chrome,Firefox,360浏览器,QQ浏览器等主流浏览器,接入方法请见Web接入章节。

Android接入,兼容Android4.0以上,接入方法及SDK下载地址请见Android接入章节。

iOS接入,兼容iOS8.0以上,接入方法及SDK下载地址请见iOS接入章节。

Web/H5环境要求

兼容IE8+,Chrome,Firefox,360浏览器,QQ浏览器等主流浏览器。

获取appId

请先进入顶象控制台(或点击右上角登陆按钮)中的“应用管理”或“应用配置”模块,并下图指引位置找到appId。 image.png

获取apiServer

可登录顶象控制台,在菜单栏无感验证->应用管理页面左上角显示“接入域名”即为前端接入apiServer,如下图所示:

引入 JS

注意:由于验证码 JS 会不定期升级更新,请直接引用顶象 CDN 上的资源,以便及时获得最新安全防护,不要将 JS 文件下载到自己服务器使用。

初始化

以下分别列举Javascript、React、Vue的初始化接入示例代码:

Javascript 示例

假设页面上有一个 ,则可以像下面这样初始化验证码。

var myCaptcha = _dx.Captcha(document.getElementById('c1'), { appId: 'appId', //appId,在控制台应用管理或应用配置模块获取 apiServer: 'https://xxx.dingxiang-inc.com', // apiServer域名地址在控制台页面->无感验证->应用管页面左上角获取,必须填写完整包括https://。 success: function (token) { // console.log('token:', token) // 获取验证码token,用于后端校验,注意获取token若是sl开头的字符串,则是前端网络不通生成的降级token,请检查前端网络及apiServer地址。 } })

初始化完成后,验证码组件会被插入到 中。

React 示例

假设页面上有一个 ,则可以像下面这样初始化验证码:

// 类组件使用componentDidMount useEffect(() => { _dx.Captcha(document.getElementById('demo'), { appId: 'appId', //appId,在控制台应用管理或应用配置模块获取 apiServer: 'https://xxx.dingxiang-inc.com', // apiServer域名地址在控制台页面->无感验证->应用管页面左上角获取,必须填写完整包括https://。 success: token => { // 获取验证码token,用于后端校验,注意获取token若是sl开头的字符串,则是前端网络不通生成的降级token,请检查前端网络及apiServer地址。 console.log(token); } }); }, [])

可点击查看 React完整示例代码,初始化完成后,验证码组件会被插入到 中。

Vue 示例

假设页面上有一个 ,则可以像下面这样初始化验证码:

mounted() { _dx.Captcha(this.$refs.demo, { // appId, 在控制台应用管理或应用配置模块获取 appId: "appId", apiServer: 'https://xxx.dingxiang-inc.com', // apiServer域名地址在控制台页面->无感验证->应用管页面左上角获取,必须填写完整包括https://。 success: token => { // 获取验证码token,用于后端校验,注意获取token若是sl开头的字符串,则是前端网络不通生成的降级token,请检查前端网络及apiServer地址。 console.log(token); } }); }

可点击查看 Vue完整示例代码 ,初始化完成后,验证码组件会被插入到 中。

外观和尺寸

滑动验证码一共有四种样式(style),分别为:

embed 嵌入式(默认),这种样式下宽度默认为 300px,可通过初始化时的 width 参数调节,高度为 200px,高度不可调节inline 内联式,这种样式占用面积较小,宽度默认为 300px,可通过初始化时的 width 参数调节,高度为 40px,高度不可调节popup 弹出式,这种样式验证码默认不可见,调用 .show() 方法后将以浮层的形式展现,宽度为 300px,高度为 200pxoneclick 触发式,这种样式占用面积较小,宽度默认为 300px,可通过初始化时的 width 参数调节,高度为 40px,高度不可调节

更多细节,可见 参数 章节。

Android环境要求条目说明开发目标Android 4.0+, 推荐5.0+开发环境Android Studio, 推荐 Gradle 7.0.2, Android Gradle plugin 7.0.4CPU架构armeabi-v7a arm64-v8a x86 x86_64SDK三方依赖无

顶象的服务器基于安全考虑已经禁用不安全的TLS协议,包括Android 4.0-4.4需要的Tls1.0、Tls1.1。 Android 4.1-4.4的webview组件支持Tlsv1.2,但并未默认启动。 若您需要支持Android 4.0-4.4,请联系顶象技术以获取支持。 目前(2023-02-03), android 5.0及以上占比为99.3%。

集成SDK导入依赖无感验证需要同时集成dx-captcha SDK和 dx-risk SDKAndroid Studio 集成

请将aar文件集成到项目对应的libs下(x.x.x表示为sdk版本号)

点击下载Demo(仅做代码配置演示使用,其中appId请在顶象后台申请,SDK需要替换为链接中下载的SDK)

点击下载React Native 接入文档

点击下载React Native Demo(仅做代码配置演示使用,其中appId请在顶象后台申请,SDK需要替换为链接中下载的SDK)

Demo工程结构如下

. ├── app │   ├── build.gradle │   ├── demo.p12 │   ├── libs │   │   ├── dx-captcha-v5.1.3r.3e8bc1ca.aar │   │   └── dx-risk-v6.1.7.1r.e53c8e0c.aar │   ├── proguard-rules.pro │   └── src │   └── main ├── build.gradle ├── gradle ├── gradle.properties ├── gradlew ├── gradlew.bat ├── local.properties └── settings.gradle 在该Module的build.gradle中如下配置:android { packagingOptions { doNotStrip "**/lib*Risk*.so" doNotStrip "**/lib*Captcha*.so" } } dependencies { implementation fileTree(dir: 'libs', include: ['*.aar']) } (可选)添加SDK所需权限 如果有使用Proguard混淆,请添加如下配置,保证SDK的相关代码不被混淆:-keep class com.dx.mobile.captcha.**{*;} -keep class org.json.**{*;} -dontwarn com.dx.mobile.** -dontwarn *.com.dx.mobile.** -dontwarn *.com.mobile.strenc.** -keep class com.dx.mobile.risk.**{*;} -keep class com.security.inner.**{*;} -keep class *.com.dx.mobile.**{*;} -keep class *.com.mobile.strenc.**{*;} } 初始化xml方式接入无感验证组件 初始化,需传appId(控制台无感验证-应用管理获取),自v5.1.6r起,在初始化前,需要设定隐私合规白名单,避免涉及隐私红线问题 DXCaptchaView.setAllowPrivacyList(PrivacyFlag.ANDROID_ID | PrivacyFlag.DEVICE_ID); // 允许表示具体某项采集的FLAG值,如下表 DXCaptchaViewV5 captcha = (DXCaptchaViewV5) findViewById(R.id.captcha); captcha.init(appId);

以下为提供的白名单采集项

FLAG描述DEFAULT默认值,关闭所有隐私采集项ALL打开所有隐私采集项IMEI加入该FLAG则采集手机IMEI值,否则不采集IMSI加入该FLAG则采集手机IMSI值,否则不采集MEID加入该FLAG则采集手机MEID值,否则不采集SERIAL_NUMBER加入该FLAG则采集手机SERIAL_NUMBER值,否则不采集MAC_ADDRESS加入该FLAG则采集手机MAC_ADDRESS值,否则不采集ICCID加入该FLAG则采集手机ICCID值,否则不采集ANDROID_ID加入该FLAG则采集手机ANDROID_ID值,否则不采集DEVICE_ID加入该FLAG则采集手机DEVICE_ID值,否则不采集GET_INSTALLED_PACKAGES加入该FLAG则采集手机的应用安装列表,否则不采集自定义配置(可选)Map config = new HashMap(); // 二级属性 Map customStyle = new HashMap(); customStyle.put("bgColor", "#FFFFFF"); // 二级属性 Map customLanguage = new HashMap(); customLanguage.put("init_inform", "shwo_拖动一下"); // 一级属性 config.put("customStyle", customStyle); config.put("customLanguage", customLanguage); //默认不加是中文,添加以下配置语言调整为英文,英文语言目前仅支持滑动验证、旋转验证等不涉及中文字符的验证方式。 //config.put("language", "en"); // 是否开启无感验证,默认为开启状态 config.put("cacheStorage", true); //若您是SaaS客户,keyURL填控制台->无感验证->应用管理左上角显示的接入域名 //若您是私有化客户,keyURL填自己的服务器地址(指将应用在本地服务器部署的地址) config.put("keyURL", "http://ip:port/udid/m1"); //若您是SaaS客户,以下参数无需填写,不可自定义 //若您是私有化客户,需填写以下私有化配置参数,如有疑问直接沟通技术支持。 // config.put("logoServer", "http://ip:port/logo"); // 私有化必填,自定义无感验证logo服务器地址 // config.put("ua_js", "http://ip:port/xxxxxx/greenseer.js"); // 私有化必填,自定义ua脚本地址 // config.put("captchaJS", "http://ip:port/xxxxxx/index.js"); // 私有化必填,自定义无感验证js地址 // config.put("keyBackup", true); // 私有化必填,该项设置为true时,私有化的场景下SDK会同时上报一份采集到的客户端运行信息至顶象云服务,以帮助顶象了解SDK的稳定运行情况;设置为false则关闭同步 // config.put("isSaaS", false); // 私有化必填,不走SaaS // config.put("corsBaseURL", "http://xxxxxx"); // 私有化选填, 自定义请求源地址, 与服务端跨域配置一致, 防止由于服务端跨域配置导致验证码无法加载 dxCaptcha.initConfig(config); 开始加载“无感验证”组件

for v5.1.5r+

// 事件监听 DXCaptchaListener listener = new DXCaptchaListener() { @Override public void handleEvent(View view, String event, Map args) { switch(event) { case "success": // 验证成功的回调 String token = args.get("token"); // 成功时会传递验证码token参数,用于后端校验,注意获取token若是sl开头的字符串,则是前端网络不通生成的降级token,请检查前端网络及apiServer地址。 Log.i(TAG, "Verify Success. token: " + token); break; case "fail": // 验证失败回调 Log.i(TAG, "Verify Failed."); break; default: break; } } }; // 开始加载 // 注意: 请务必设置extraEvents参数,确保您关注的事件在这个列表中, // SDK内部预置了一个默认事件列表,这个列表不同平台或版本会有差别,请不依赖 dxCaptcha.startToLoad(listener, "success", "fail");

for 旧版本

DXCaptchaListener listener = new DXCaptchaListener() { @Override public void handleEvent(View view, DXCaptchaEvent event, Map args) { switch(event) { case DXCAPTCHA_SUCCESS: // 验证成功的回调 String token = args.get("token"); // 成功时会传递验证码token参数,用于后端校验,注意获取token若是sl开头的字符串,则是前端网络不通生成的降级token,请检查前端网络及apiServer地址。 Log.i(TAG, "Verify Success. token: " + token); break; case DXCAPTCHA_FAIL: // 验证失败回调 Log.i(TAG, "Verify Failed."); break; default: break; } } }; dxCaptcha.startToLoad(listener); 使用结束,调用destroy方法释放资源dxCaptcha.destroy(); 参数说明

初始化参数可查阅 参数,在 Android SDK 中, 下列参数实现存在差异。

参数备注版本stylesdk内固定为"embed", 如果您想实现弹出效果,请参考Demowidthsdk内自动计算success,fail请在 DXCaptchaListener.handleEvent 中处理constID_js,constIDServer,constID_options无需配置captchaJS用于设置私有化验证码脚本keyBackup用于设置是否备份设备指纹私有化, v5.1.7r已经废弃keyURL用于设置设备指纹私有化服务器地址。SAAS客户无需设置corsBaseURL针对私有化部署客户,当服务端安全策略限制了跨域请求时(CORS),请设置此值。格式形如 http://cdn.dingxiang-inc.com。SAAS客户无需设置。v5.1.3r +事件说明新版枚举旧版枚举(不推荐)描述平台备注"success"DXCAPTCHA_SUCCESS验证成功(整体)android"fail"DXCAPTCHA_FAIL验证失败(整体)android"onCaptchaJsLoaded"n/acaptcha.js加载成功androidv5.1.7r +"onCaptchaJsLoadFail"n/acaptcha.js加载失败androidv5.1.7r +

其余的事件列表,请见这里, 每个事件都额外对应一个before, after事件. 比如: render相关事件, 就包含"rander", "before_rander", "after_rander" 三个事件, 对应旧版枚举DXCAPTCHA_RENDER, DXCAPTCHA_BEFORE_RENDER, DXCAPTCHA_AFTER_RENDER

注:

Android SDK 中不触发 dragging 事件Android SDK 中不触发 show/hide 系列的事件iOS

(v1.5.x)

Apple Store上架请特别注意(集成SDK的第4节)

环境要求条目说明兼容平台iOS 8.0+开发环境XCode 4.0 +CPU架构armv7, arm64, i386, x86_64SDK依赖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 sdkDXRisk.framework 不带idfa获取逻辑的Dynamic Library FrameworkDXRiskWithIDFA.framework 带idfa获取逻辑的Dynamic Library FrameworkDXRiskStatic.framework 不带idfa获取逻辑的Static Library FrameworkDXRiskStaticWithIDFA.framework 带idfa获取逻辑的Static Library Framework

若在项目中添加DXRisk.framework或者DXRiskWithIDFA.framework其中之一,选择Target -> General,在Frameworks,Libraries,and Embedded Content中,将DXRisk.framework或者DXRiskWithIDFA.framework 对应的 Embed 切换到Embed & Sign。如下图:

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

4A23453213E696EC12C2AE2A1070EA0C.jpg

2、下载顶象无感验证 dx-captcha SDK ,解压得到 DXCaptchaSDK 文件夹,内含以下文件

DXCaptchaSDK CaptchaFrameworkDXCaptcha.bundle 无感验证资源包DingxiangCaptchaSDK.framework Dynamic Library FrameworkDingxiangCaptchaSDKStatic.framework Static Library FrameworkDXCaptchaDemo 集成demo

3、将 DingxiangCaptchaSDK.framework 或者 DingxiangCaptchaSDKStatic.framework 文件夹以及 DXCaptcha.bundle 资源文件一起拖入工程根目录

若在项目中添加DingxiangCaptchaSDK.framework,则需要选择Target -> General,在Frameworks,Libraries,and Embedded Content中,将DingxiangCaptchaSDK.framework 对应的 Embed 切换到Embed & Sign

若在项目中添加DingxiangCaptchaSDKStatic.framework,需要在Build Settings -> Other Linker Flags 设置 -ObjC 。

点击下载无感验证iOS Demo

点击下载React Native 接入文档

点击下载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}" export PATH=$PATH:/usr/libexec # 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=$(PlistBuddy -c "Print :CFBundleExecutable" "$FRAMEWORK/Info.plist") 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 #import

然后实现 DXCaptchaDelegate 协议中的 captchaView:didReceiveEvent:arg: 方法,以接收验证结果回调

@interface ViewController () @end @implementation ViewController - (void) captchaView:(DXCaptchaView *)view didReceiveEvent:(DXCaptchaEventType)eventType arg:(NSDictionary *)dict { switch(eventType) { case DXCaptchaEventSuccess: { // 验证成功的回调 NSString *token = dict[@"token"]; // 成功时会传入验证码token参数,用于后端校验,注意获取token若是sl开头的字符串,则是前端网络不通生成的降级token,请检查前端网络及apiServer地址。 [[[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

最后创建无感验证组件,需要传入 appId, delegate(验证回调的代理), 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 接口,Saas客户参考以下配置

NSDictionary *config = @{@"appId": @"your appId", @"language": @"en"};//在控制台应用管理可查看appId,language默认不传是中文,按此设置为英文,英文语言目前仅支持滑动验证、旋转验证等不涉及中文字符的验证方式。 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"]; //在控制台应用管理可查看appId [config setObject:@"your apiServer" forKey:@"apiServer"]; //私有化必填,无感验证自定义本地服务器地址 [config setObject:@"your logoServer" forKey:@"logoServer"]; //私有化必填,自定义无感验证logo服务器地址 [config setObject:@"your ua_js" forKey:@"ua_js"]; //私有化必填,自定义ua脚本地址 [config setObject:@"your captchaJS" forKey:@"captchaJS"]; //私有化必填,自定义无感验证js地址 [config setObject:@NO forKey:@"isSaaS"]; //私有化必填,不走SaaS [config setObject:@"your riskServerAddress" forKey:@"keyURL"]; //私有化必填,设备指纹私有化服务器地址 // [config setObject:@"http://xxxxxx" forKey:@"corsBaseURL"]; // 私有化选填, 自定义请求源地址, 与服务端跨域配置一致, 防止由于服务端跨域配置导致验证码无法加载 [config setObject:@YES forKey:@"keyBackup"]; //私有化必填,该项设置为true时,私有化的场景下SDK会同时上报一份采集到的客户端运行信息至顶象云服务,以帮助顶象了解SDK的稳定运行情况;设置为false则关闭同步 DXCaptchaView *captchaView = [[DXCaptchaView alloc] initWithConfig:config delegate:self frame:frame]; 参数说明

初始化参数可查阅 参数,在 iOS SDK 中, 下列参数的实现存在差异。

参数备注版本stylesdk内固定为"embed"widthsdk会根据 frame 进行自适应调整,建议尺寸为 v2: 300x200; v5: 362x335success,fail请在 delegate 中处理constID_js,constIDServer,constID_options无需配置userId用于传递给 ConstID 模块作用户标识captchaJS用于设置私有化验证码脚本keyBackup用于设置是否备份设备指纹私有化, v5.1.7r已经废弃keyURL用于设置设备指纹私有化服务器地址。SAAS客户无需设置corsBaseURL针对私有化部署客户,当服务端安全策略限制了跨域请求时(CORS),请设置此值。格式形如 http://cdn.dingxiang-inc.com。SAAS客户无需设置。v5.1.3r +事件说明新版枚举旧版枚举(不推荐)描述平台备注"success"DXCaptchaEventSuccess验证成功(整体)ios"fail"DXCaptchaEventFail验证失败(整体)ios"onCaptchaJsLoaded"n/acaptcha.js加载成功iosv5.2.0r +"onCaptchaJsLoadFail"n/acaptcha.js加载失败iosv5.2.0r +

其余的事件列表,请见这里, 每个事件都额外对应一个before, after事件. 比如: render相关事件, 就包含"rander", "before_rander", "after_rander" 三个事件, 对应旧版枚举DXCaptchaEventRender, DXCaptchaEventBeforeRender, DXCaptchaEventAfterRender

注:iOS SDK 中不触发 show/hide 系列的事件。如SDK无效且运行过程中出现NOT FOUND DXRISK-SDK日志,请检查是否遗漏顶象风控SDK的集成

微信小程序插件式接入1)添加插件

用管理员身份登录微信公众平台,请使用需要接入小程序的相关账号(微信公众平台采用不同账号区分,公众号的后台和小程序的后台分别为不同账号),依次点击:设置-第三方服务-添加插件,然后输入关键字“顶象”搜索,选择“顶象验证码”进行申请,申请成功后即可开始接入,如下图所示: 屏幕快照 2018-10-16 下午3.17.25.png

2)获取密钥

未注册用户可在顶象官网进行账号注册,创建应用获取应用密钥AppID和AppSecret。 已注册用户,可直接在顶象控制台->无感验证->应用管理页面获取对应的AppID和AppSecret。

3)集成插件

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

{ "plugins": { "captcha": { "version": "1.3.4", //验证码微信小程序插件版本号,后续更新只需更改版本号 "provider": "wxbf8483dfc5ac6817" //唯一值,小程序插件id,不可更改 } } }

在页面.json中引入自定义组件

{ "usingComponents": { "basic": "plugin://captcha/basic", "oneclick": "plugin://captcha/oneclick", //请注意⚠️,1.3.*版本中不支持oneclick,可以省略掉本行内容 } } 4)使用插件

一、点击式(请注意:1.3.x版本不支持oneclick)

在页面.wxml中使用插件

登陆

在页面.js中监听事件

Page({ data: { options: { appId: '这里填写你在顶象官网申请到的appId', //控制台应用管理页面进行获取 style: 'oneclick' }, captchaShow: false, captchaReload: false }, login: function () { // captchaReload用来重置验证码 this.setData({ captchaReload: true, captchaShow: true }) }, // 验证码成功回调 captchaSuccess: function (data) { console.log('验证码成功回调token:', data.detail) //获取验证码token,用于后端验证码校验 this.setData({ captchaReload: false, captchaShow: false, }) }, // 验证码关闭回调 captchaHide: function () { console.log('captcha_hide') this.setData({ captchaShow: false, captchaReload: false }) } // 注意!在小程序逻辑中,captchaShow和captchaReload必须有变化才会触发相应逻辑 // 即captchaShow必须从false变为true才会展示验证码 // 即captchaReload必须从false变为true才会重新加载验证码 })

二、弹出式 在页面.wxml中使用插件

登陆

在页面.js中监听事件

Page({ data: { options: { appId: '这里填写你在顶象官网申请到的appId', //控制台应用管理页面进行获取 style: 'popup' }, captchaShow: false, captchaReload: false }, login: function () { // captchaShow 用于弹出验证码 // captchaReload 用于重置验证码 this.setData({ captchaReload: true, captchaShow: true }) }, // 验证码成功回调 captchaSuccess: function (data) { // 验证成功返回的 token console.log('验证码成功回调token:', data.detail) //获取验证码token,用于后端验证码校验 this.setData({ captchaShow: false, captchaReload: false }) }, // 验证码关闭回调 captchaHide: function () { console.log('captcha_hide') this.setData({ captchaShow: false, captchaReload: false, }) } }) 5)小程序接入问题排查及注意事项

小程序侧有以下注意事项:

首次触发验证码验证方式只支持滑块验证码;首次验证不通过,二次触发验证码验证方式只支持图文点选;需要在控制台->无感验证->应用管理,确认验证类型,如无权限请联系技术支持。跳转式接入1)关联小程序

用管理员身份登录微信公众平台,请使用需要公众号的相关账号(微信公众平台采用不同账号区分,公众号的后台和小程序的后台分别为不同账号),依次点击:小程序-小程序管理-添加-关联小程序,然后输入小程序AppID“wx82db4a59175bdfdf”并搜索,如下图所示:

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

输入APPID搜索顶象小程序.png

2)获取密钥

未注册用户可在顶象官网进行账号注册,创建应用获取应用密钥AppID和AppSecret。 已注册用户,可直接在顶象控制台->无感验证->应用管理页面获取对应的AppID和AppSecret。

3)小程序集成

1.通过navigator组件跳转至顶象验证码。

登陆 Page({ data: { options: { appId: '这里填写在顶象官网申请到的appId', //控制台应用管理页面进行获取 customStyle: { panelBg: '', captchaBgColor: '' } } } }) 参数说明:参数值说明appIdString这里填写在顶象官网申请到的appId,注意必须填写正确,否则会报:功能无法使用customStyleObject自定义样式对象,panelBg为整个页面的background属性,captchaBgColor为验证码的background-color属性

2.在顶象验证码中验证,图片如下所示:

验证图片

3.验证成功后,验证结果会在调用方app.js中顶onShow生命周期方法中取到。

if (options.scene === 1038 && options.referrerInfo.appId === 'wx82db4a59175bdfdf') { const result = options.referrerInfo.extraData; if (result) { console.log('返回结果:', result) } else { // 用户点击右上角关闭了验证码 } } 验证结果说明:参数值说明successBoolean验证成功tokenString验证成功才有:tokenmsgString验证失败或参数不合法才有:错误信息

微信小程序更新记录

支付宝小程序1)添加插件

点击获取插件 (获取插件页面)

image.png

2)获取密钥

未注册用户可在顶象官网进行账号注册,创建应用获取应用密钥AppID和AppSecret。

3)集成插件

1.在app.json中声明插件(目前小程序仅支持滑动验证,请确保配置正确✅)

"plugins": { "captcha": { "version": "*", "provider": "2021002132671964" } },

2.在页面.json 如:index.json 下引入插件

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

一 弹出式

在 页面 .axml 中使用

登录

在.js脚本中监听事件

Page({ data:{ options:{}, captchaShow:false, captchaReload:false, }, onLoad() { this.setData({ options:{ appId:'这里填写你在顶象官网申请到的appId', style: 'popup', //弹出式 }, }) }, onReady() { // 页面加载完成 }, onShow() { // 页面显示 }, toLogin(){ // captchaShow 弹出验证码 // captchaReload 用于重置验证码 this.setData({ captchaShow: true, captchaReload: true, }) }, // 验证码成功回调 captchaSuccess:function(token){ console.log('成功',token); this.setData({ captchaShow: false, captchaReload: false, //配置后可重置验证码 }) // 在此执行验证成功后的任务 }, // 验证码关闭回调 captchaHide: function(){ this.setData({ captchaShow: false, captchaReload: false, }) console.log('关闭回调了') } });

二 点击式

在 页面 .axml 中使用

登录

在.js脚本中监听事件

Page({ data:{ options:{}, captchaShow:false, captchaReload:false, }, onLoad() { this.setData({ options:{ appId:'这里填写你在顶象官网申请到的appId', style: 'oneclick', //点击式 }, }) }, onReady() { // 页面加载完成 }, onShow() { // 页面显示 }, toLogin(){ // captchaReload 用于重置验证码 this.setData({ captchaReload: true, captchaShow: true }) }, // 验证码成功回调 captchaSuccess:function(token){ console.log('成功',token); this.setData({ captchaShow: false, captchaReload: false, //配置后可重置验证码 }) }) }, // 验证码关闭回调 captchaHide: function(){ this.setData({ captchaReload: false, captchaShow: false }) console.log('关闭回调了') } }); 支付宝小程序插件接入完整示例

请确认在支付宝小程序管理后台创建了应用并按照上文“获取插件”页面提示完成了插件的绑定。

请点击下面链接下载完整示例Demo:

https://cdn.dingxiang-inc.com/files/15284/captcha-alipay-saas-pluin-demo.tgz

支付宝小程序验证码如何采集设备指纹

在options中指定constIDServer: 'https://constid.dingxiang-inc.com/udid/w1'即可。如果未指定则不会采集。

支付宝小程序注意事项

支付宝小程序暂时仅支持首次滑块验证,请确保在控制台的安全配置仅开启了首次滑块验证。

百度小程序1 )百度小程序目前通过组件方式接入2 )获取密钥

未注册用户可在顶象官网进行账号注册,创建应用获取应用密钥AppID和AppSecret。

3 )复制提供的components.zip 到项目根目录下并解压;4 )在pages/index/index.json中声明引入验证码插件,加入下面的内容:"usingComponents": { "basic": "/components/basic/basic", "oneclick": "/components/oneclick/oneclick" } 5 )使用插件一 弹出式

.swan 中使用引入组件

在.js脚本中监听事件

Page({ data: { options: { appId: '这里填写你在顶象官网申请到的appId', style: 'popup' }, captchaShow: false, captchaReload: false }, login: function () { // captchaShow 用于弹出验证码 // captchaReload 用于重置验证码 this.setData({ captchaReload: true, captchaShow: true }) }, // 验证码成功回调 captchaSuccess: function (token) { // 验证成功返回的 token console.log('token:', token) this.setData({ captchaReload: false, captchaShow: false }) }, // 验证码关闭回调 captchaHide: function () { console.log('captcha_hide') this.setData({ captchaShow: false, captchaReload: false }) } }) 客户端通用说明参数常规参数

初始化时有若干参数,其中 appId 是必填的。

参数名必填类型说明平台appId是String当前应用的唯一标识alltype否String类型,目前只有一个选项 basic,默认值为 basic。webstyle否String样式,可选项有 embed(默认)、inline、popup、oneclick 四种,具体效果可参见线上demo。webinlineFloatPosition否String浮动层位置,仅当 style 的值为 inline 时有效,可选项有 up(默认)、down 两种,具体效果可参见线上demo。weboneClickFloatPosition否String浮动层位置,仅当 style 的值为 oneclick 时有效,可选项有 up,当style值为oneclick且不传此参数,默认为弹出形式。webwidth否Number控件(滑动条)宽度,单位为像素,默认为 300。weblanguage否String语言,可选项有 cn(默认,中文)、en(英文)。allsuccess否Function验证成功时的回调函数,会传入一个参数,值为本次验证的 token:constId,接入方需在后续的验证中传回此项值。注:此回调函数包含无感验证成功及滑动验证成功。webfail否Function验证失败时的回调函数,会传入一个参数,值为出错信息。web个性化参数

这部分参数可以控制一些自定义信息。

参数名必填类型说明平台customStyle否Object自定义样式,详情参见自定义样式说明。allcustomLanguage否Object自定义语言,详情参见自定义语言说明。all高级参数

这部分参数通常而言不需要设置,除非你确切知道它们的含义。

参数名必填类型说明版本平台ua_js否String自定义 ua 脚本地址,格式形如 https://cdn.dingxiang-inc.com/ctu-group/ctu-greenseer/greenseer.js。webconstID_js否String自定义 constID 脚本地址,格式形如 https://cdn.dingxiang-inc.com/ctu-group/constid-js/index.js。webconstIDServer否String自定义 constID 服务地址,格式形如 http://constid.dingxiang-inc.com/udid/c.png。webapiServer否String自定义 API 服务地址,格式形如 http://123.207.220.181:9090 或 https://api.dingxiang-inc.com。alllogoServer否String自定义 无感验证 logo 服务地址,格式形如 http://123.207.220.181:9090/logo。allprotocol否String请求协议,可选项有 http:、https:,默认为 https:。webtimeout否Number超时时间,单位为毫秒,默认值为 6000。注意,只有部分请求可设置超时时间。allconstID_options否ObjectconstID 初始化配置参数,参见 ConstID 文档,如此项中的参数与外部参数冲突(比如其中也定义了 appId 且与外部的 appId 不同,则以此处的为准。webuid否String用于标识用户的唯一ID,在后端调用tokenVerify时返回webcorsBaseURL否String针对私有化部署客户,当服务端安全策略限制了跨域请求时(CORS),请设置此值。格式形如 http://cdn.dingxiang-inc.com。SAAS客户无需设置。v5.1.3r +android,ios基础类型

初始化时,如果省略 type 参数,或传入的值为 basic,则启用基础类型验证码。

例:

var myCaptcha = _dx.Captcha(document.getElementById('c1'), { appId: 'appId', type: 'basic', // setCaptchaUrl("https://xxx.dingxiang-inc.com/api/tokenVerify"); //指定服务器地址,saas可在控制台,应用管理页面最上方获取 $response = $client->verifyToken(token); //token指的是前端传递的值,即验证码验证成功颁发的token echo $response->serverStatus; //确保验证状态是SERVER_SUCCESS,SDK中有容错机制,在网络出现异常的情况会返回通过 if($response->result){ echo "true"; /**token验证通过,继续其他流程**/ }else{ echo "false"; /**token验证失败**/ } C#C#版本SDK下载: 点击下载// 依赖 .NET Framework 4.0 // 在您的项目中添加DxCsharpSDK.dll引用 String appId = "appId"; String appSecret = "appSecret"; DxCsharpSDK.Captcha captcha = new DxCsharpSDK.Captcha(appId,appSecret); captcha.SetCaptchaUrl("https://xxxx.dingxiang-inc.com/api/tokenVerify"); //指定服务器地址,saas可在控制台,应用管理页面最上方获取 //captcha.SetTimeOut(2000); //设置超时时间,单位毫秒,默认2秒 DxCsharpSDK.CaptchaResponse response = captcha.VerifyToken("token"); Response.Write(response.captchaStatus); //确保验证状态是SERVER_SUCCESS,SDK中有容错机制,在网络出现异常的情况会返回通过 if (response.result) { /**token验证通过,继续其他流程**/ } else { /**token验证失败,业务系统可以直接阻断该次请求或者继续弹验证码**/ } PythonPython版本SDK下载: 点击下载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("https://xxx.dingxiang-inc.com/api/tokenVerify") # 指定服务器地址,saas可在控制台,应用管理页面最上方获取 response = captchaClient.checkToken("token") print response['serverStatus'] #确保验证状态是SERVER_SUCCESS,SDK中有容错机制,在网络出现异常的情况会返回通过 print response['result'] if response['result']: # token验证通过,继续其他流程 pass else: # token验证失败,业务系统可以直接阻断该次请求或者继续弹验证码 pass Node.jsnpm install dx-captcha-sdk --save const CaptchaSDK = require('dx-captcha-sdk') const sdk = new CaptchaSDK('您的appId', '您的appSecret') sdk.verifyToken('验证码token', { timeout: 3000, params: { ip: '透传IP', sceneCode: '场景code' } }).then(({ captchaStatus, detail }) => { console.log('验证成功') }).catch(({ detail }) => { console.log('验证失败') }) Golang

SDK 下载地址

// 版本 Go 1.13 import "./captcha-client" /* 构造入参为appId和appSecret appId和前端验证码的appId保持一致,appId可公开 appSecret为秘钥,请勿公开 token在前端完成验证后可以获取到,随业务请求发送到后台,token有效期为两分钟 ip 可选,提交业务参数的客户端ip */ appId := "appId" appSecret := "appSecret" captchaClient := captcha_client.NewCaptchaClient(appId, appSecret) //captchaClient.SetTimeout(2000) //设置超时时间,单位毫秒,默认2秒 captchaClient.SetCaptchaUrl("https://xx.dingxiang-inc.com/api/tokenVerify") //指定服务器地址,saas可在控制台,应用管理页面最上方获取 captchaResponse := captchaClient.VerifyToken(token) //captchaResponse := captchaClient.VerifyTokenAndIP(token, ip) //针对一些token冒用的情况,业务方可以采集客户端ip随token一起提交到验证码服务,验证码服务除了判断token的合法性还会校验提交业务参数的客户端ip和验证码颁发token的客户端ip是否一致 //fmt.Println(captchaResponse.CaptchaStatus) //确保验证状态是SERVER_SUCCESS,SDK中有容错机制,在网络出现异常的情况会返回通过 //fmt.Println(captchaResponse.Ip) //验证码服务采集到的客户端ip if captchaResponse.Result { /*token验证通过,继续其他流程*/ } else { /*token验证失败,业务系统可以直接阻断该次请求或者继续弹验证码*/ } FAQ常见问题业务系统怎样和滑动验证码结合?

针对需要保护的业务接口,在页面上嵌入滑动验证码,用户滑动成功后会得到一个安全token,业务接口需要带着token到后台进行token安全验证,验证通过以后再继续业务流程。

以登录为例,未接入验证码前的业务接口:接口:http://domain/login 参数:用户名,密码

现在在登录页面接入验证码,用户滑动以后,会得到一个安全token接入后的业务接口: 接口:http://domain/login 参数:用户名,密码,安全token顶象无感验证服务是否收费?目前顶象验证码服务可免费试用,如果所需验证码调用量达到一定的数量,或需定制自己Logo、背景图片,我们将按照不同量的标准收费。具体收费请咨询顶象官网在线客服。相对于同类产品,顶象的优势在哪?依托顶象强大的技术研发和十余年的安全防控经验,顶象安全大脑可以在大数据海洋中精确定位各类异常操作,实时决策,并从海量真人操作中学习,不断进化识别能力;目前顶象的客户已遍布金融、通讯、IoT、电商、互联网等行业;顶象无感验证还具备快速接入、极致体验、丰富报表等特点。无感验证服务支持哪些浏览器版本?IE8+,Chrome,Firefox,360浏览器,QQ浏览器等主流浏览器。在使用或开发过程中遇到问题,是否有技术支持?是的,本着客户第一的原则,有问题您可以随时咨询顶象官网的在线客服,我们将竭诚为您解答。智能无感模式和强校验模式有什么区别?智能无感模式:系统会根据采集的环境设备信息向服务端进行无感模型校验,通常包括设备模型侦测(检测是否为模拟器或者存在恶意信息篡改等)、异常关联侦测(检测是否存在异常的关联,如同设备短时间多IP关联、短时间多次进行验证等),若用户通过无感模型校验则无需进行滑动验证即可验证通过。强校验模式: 强制用户每次通过需要完成验证方可通过,一般推荐用户在某些需要高校验要求的业务环节选择此模式如注册、获取短信验证码等环节。关于模式切换:接入客户可根据自身实际需求,在应用配置下自主选择所需的验证模式。验证码是否有隐私权限政策相关解答?见权限政策相关验证码配置问题如何自查?

请使用在线配置自查工具:https://cdn.dingxiang-inc.com/fe/captcha-troubleshooting/

点击“新建配置”,填入当前您使用的配置内容,可以测试当前配置是否有问题。

更多问题信息查看?可点击查看

文档版本: 31eec7bb



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有