阿里云金融级实人认证

实现思路:

完成该实人认证需要前后端进行配合,首先前端发送请求到后端,由后端发送请求调用阿里云的InitFaceVerify接口,获取到CertifyId。将CertifyId传给前端,前端再将次发送请求(携带CertifyId)到后端,调用DescribeFaceVerify接口,查询验证结果

实现步骤(仅展示阿里云配置及java代码)

一:获取认证场景ID

(1):开通金融级实人认证服务

 登录实人认证产品页面,单击立即开通金融级实人。

登录链接:实人认证_身份认证系统_身份验证平台_人脸识别技术-阿里云

    

 在金融级实人认证(按量计费)页面,勾选金融级实人认证(按量计费)服务协议,单击立即开通。 

 

(2):创建RAM用户,并授予对应权限

首先创建RAM用户

  

然后为RAM添加权限两个权限:AliyunYundunCloudAuthFullAccessAliyunAntCloudAuthFullAccess(我这里省略了权限添加的详细步骤,不知道的老铁可以去官网自己摸索一下)

  

(3):添加认证场景,并获取认证场景ID

开通金融级实人认证服务后,就可以添加认证场景了

添加认证场景链接:https://yundun.console.aliyun.com/?spm=a2c4g.11186623.0.0.8b4e56bfzmVkmO&p=cloudauth#/overview

  

  

在这里获取认证场景ID

  

二:代码实现

1:导入maven依赖:

            <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>cloudauth20190307</artifactId>
                <version>2.6.0</version>
            </dependency>
            <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>credentials-java</artifactId>
                <version>0.3.0</version>
            </dependency>

2:调用InitFaceVerify接口(在参数正确且完整的情况下,下面的main方法可直接运行。可根据业务对main方法进行修改,然后获取CertifyId)

import com.aliyun.cloudauth20190307.Client;
import com.aliyun.cloudauth20190307.models.InitFaceVerifyRequest;
import com.aliyun.cloudauth20190307.models.InitFaceVerifyResponse;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;

import java.util.Arrays;
import java.util.List;

public class InitFaceVerify {

  /**
     * @param metaInfo:MetaInfo环境参数(通过客户端SDK获取)
     * @return response.getBody().getRequestId():请求ID
     * @return response.getBody().getCode():请求状态码(200代表成功)
     * @return response.getBody().getMessage():请求信息
     * @return response.getBody().getResultObject().getCertifyId():返回的唯一标识
     */
    public static void main(String[] args) throws Exception {

        InitFaceVerifyRequest request = new InitFaceVerifyRequest();
        // 认证场景ID+L。
        request.setSceneId(0L);

        // 设置商户请求的唯一标识。(请自己生成一个不超过32位数的数字及字母字符串)
        request.setOuterOrderNo("xxxx");

        // 认证方案。(此处为固定值,不需要修改)
        request.setProductCode("LR_FR");

        //用户ID,根据业务自行填充
        request.setUserId("12345xxxx");

        // 模式。(LIVENESS(默认):眨眼动作活体检测。PHOTINUS_LIVENESS:眨眼动作活体+炫彩活体双重检测。MULTI_ACTION:多动作活体检测。当前为眨眼+任意摇头检测。)
        request.setModel("LIVENESS");
        
        //非必需值,证件类型,目前仅支持IDENTITY_CARD值(身份证)
        //request.setCertType("IDENTITY_CARD");

        //真实姓名
        //request.setCertName("张三");

        //真实身份证号码
        //request.setCertNo("xxxx");

        // MetaInfo环境参数(此参数由前端传入)
        //可用“{"zimVer":"3.0.0","appVersion": "1","bioMetaInfo": "4.1.0:1150****,0","appName": "com.aliyun.antcloudauth","deviceType": "ios","osVersion": "iOS 10.3.2","apdidToken": "","deviceModel": "iPhone9,1"}”进行测试使用
        request.setMetaInfo("xxxxxx");

        // 推荐,支持服务路由。
        InitFaceVerifyResponse response = initFaceVerifyAutoRoute(request);


        System.out.println(response.getBody().getRequestId());
        System.out.println(response.getBody().getCode());
        System.out.println(response.getBody().getMessage());
        System.out.println(response.getBody().getResultObject() == null ? null
                : response.getBody().getResultObject().getCertifyId());
    }

    private static InitFaceVerifyResponse initFaceVerifyAutoRoute(InitFaceVerifyRequest request) {
        // 第一个为主区域Endpoint,第二个为备区域Endpoint。
        List<String> endpoints = Arrays.asList("cloudauth.cn-shanghai.aliyuncs.com", "cloudauth.cn-beijing.aliyuncs.com");
        InitFaceVerifyResponse lastResponse = null;
        for (int i=0; i<endpoints.size(); i++) {
            try {
                InitFaceVerifyResponse response = initFaceVerify(endpoints.get(i), request);
                lastResponse = response;

                // 服务端错误,切换到下个区域调用。
                if(response != null){
                    if(500 == response.getStatusCode()){
                        continue;
                    }
                    if(response.getBody() != null){
                        if("500".equals(response.getBody().getCode())){
                            continue;
                        }
                    }
                }

                return response;
            } catch (Exception e) {
                e.printStackTrace();
                if(i == endpoints.size()-1){
                    throw new RuntimeException(e);
                }
            }
        }

        return lastResponse;
    }

    private static InitFaceVerifyResponse initFaceVerify(String endpoint, InitFaceVerifyRequest request)
            throws Exception {
        // 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
        // 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
        // 本示例通过阿里云Credentials工具从环境变量中读取AccessKey,来实现API访问的身份验证。如何配置环境变量,请参见https://help.aliyun.com/document_detail/378657.html。
        com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client();
        Config config = new Config();
        config.setCredential(credentialClient);
        config.setEndpoint(endpoint);
        // 设置http代理。
        //config.setHttpProxy("http://xx.xx.xx.xx:xxxx");
        // 设置https代理。
        //config.setHttpsProxy("https://xx.xx.xx.xx:xxxx");
        Client client = new Client(config);

        // 创建RuntimeObject实例并设置运行参数。
        RuntimeOptions runtime = new RuntimeOptions();
        runtime.readTimeout = 10000;
        runtime.connectTimeout = 10000;

        return client.initFaceVerifyWithOptions(request, runtime);
    }
}

3:调用DescribeFaceVerify接口查询验证结果(在参数正确且完整的情况下,下面的main方法可直接运行。可根据业务对main方法进行修改,然后获取查询验证结果)

import com.aliyun.cloudauth20190307.Client;
import com.aliyun.cloudauth20190307.models.DescribeFaceVerifyRequest;
import com.aliyun.cloudauth20190307.models.DescribeFaceVerifyResponse;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;

import java.util.Arrays;
import java.util.List;

public class DescribeFaceVerify {
    public static void main(String[] args) throws Exception {

        // 通过以下代码创建API请求并设置参数。
        DescribeFaceVerifyRequest request = new DescribeFaceVerifyRequest();
        // 请输入场景ID+L。
        request.setSceneId(0L);

        //由前端传入的certifyId
        request.setCertifyId("xxxx");

        // 推荐,支持服务路由。
        DescribeFaceVerifyResponse response = describeFaceVerifyAutoRoute(request);

        // 不支持服务自动路由。
        //DescribeFaceVerifyResponse response = describeFaceVerify("cloudauth.cn-shanghai.aliyuncs.com", request);

        System.out.println(response.getBody().getRequestId());
        System.out.println(response.getBody().getCode());
        System.out.println(response.getBody().getMessage());
        System.out.println(
                response.getBody().getResultObject() == null ? null : response.getBody().getResultObject().getPassed());
        System.out.println(
                response.getBody().getResultObject() == null ? null : response.getBody().getResultObject().getSubCode());
        System.out.println(
                response.getBody().getResultObject() == null ? null
                        : response.getBody().getResultObject().getIdentityInfo());
        System.out.println(
                response.getBody().getResultObject() == null ? null
                        : response.getBody().getResultObject().getDeviceToken());
        System.out.println(
                response.getBody().getResultObject() == null ? null
                        : response.getBody().getResultObject().getMaterialInfo());
    }

    private static DescribeFaceVerifyResponse describeFaceVerifyAutoRoute(DescribeFaceVerifyRequest request) {
        // 第一个为主区域Endpoint,第二个为备区域Endpoint。
        List<String> endpoints = Arrays.asList("cloudauth.cn-shanghai.aliyuncs.com", "cloudauth.cn-beijing.aliyuncs.com");
        DescribeFaceVerifyResponse lastResponse = null;
        for (int i=0; i<endpoints.size(); i++) {
            try {
                DescribeFaceVerifyResponse response = describeFaceVerify(endpoints.get(i), request);
                lastResponse = response;

                // 服务端错误,切换到下个区域调用。
                if(response != null){
                    if(500 == response.getStatusCode()){
                        continue;
                    }
                    if(response.getBody() != null){
                        if("500".equals(response.getBody().getCode())){
                            continue;
                        }
                    }
                }

                return response;
            } catch (Exception e) {
                e.printStackTrace();
                if(i == endpoints.size()-1){
                    throw new RuntimeException(e);
                }
            }
        }

        return lastResponse;
    }

    private static DescribeFaceVerifyResponse describeFaceVerify(String endpoint, DescribeFaceVerifyRequest request)
            throws Exception {
        // 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
        // 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
        //本示例通过阿里云Credentials工具从环境变量中读取AccessKey,来实现API访问的身份验证。如何配置环境变量,请参见https://help.aliyun.com/document_detail/378657.html。
        com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client();
        Config config = new Config();
        config.setCredential(credentialClient);
        config.setEndpoint(endpoint);
        // 设置http代理。
        //config.setHttpProxy("http://xx.xx.xx.xx:xxxx");
        // 设置https代理。
        //config.setHttpsProxy("http://xx.xx.xx.xx:xxxx");
        Client client = new Client(config);

        // 创建RuntimeObject实例并设置运行参数。
        RuntimeOptions runtime = new RuntimeOptions();
        runtime.readTimeout = 10000;
        runtime.connectTimeout = 10000;

        return client.describeFaceVerifyWithOptions(request, runtime);
    }

}

到这里就结束了,最后需要提醒大家的是:在测试的时候可能会报RAM无权限,这是因为你在创建RAM的时候权限可能给错了对象

  

阿里云认证提供了多种前端集成方式,具体选择哪种方式需要根据你的业务场景和技术栈来决定。以下是两种常见的前端集成方式: 1. 使用阿里云认证提供的 JS SDK 阿里云认证提供了 JS SDK,可以通过在 HTML 中引入 SDK 的方式来使用阿里云认证服务。具体步骤如下: - 在 HTML 中引入 JS SDK: ```html <script src="https://g.alicdn.com/idst-exp/id-preset-sdk/1.0.0/index.js"></script> ``` - 创建认证对象: ```javascript const auth = new window.IDPreset({ preset: '<preset>', bizType: '<bizType>', token: '<token>', onSuccess: function(data) { console.log('认证成功', data); }, onError: function(error) { console.log('认证失败', error); } }); ``` 其中,`preset` 是预设的认证流程,`bizType` 是业务类型,`token` 是认证的 token,`onSuccess` 是认证成功的回调函数,`onError` 是认证失败的回调函数。 - 调用认证方法: ```javascript auth.authenticate(); ``` 2. 使用阿里云认证提供的 Web API 阿里云认证还提供了 Web API,可以通过发送 HTTP 请求来使用阿里云认证服务。具体步骤如下: - 发送认证请求: ```javascript fetch('https://id.cn-shanghai.aliyuncs.com/rest/authentication/face?bizType=<bizType>&preset=<preset>&token=<token>') .then(response => { if (response.ok) { return response.json(); } throw new Error('Network response was not ok.'); }) .then(data => { console.log('认证成功', data); }) .catch(error => { console.error('认证失败', error); }); ``` 其中,`<bizType>` 是业务类型,`<preset>` 是预设的认证流程,`<token>` 是认证的 token。 无论使用哪种集成方式,都需要注意防止网络攻击和数据泄露等安全问题。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值