场景简介

授信终端认证终端认证常用于限制账号在特定的绑定终端上登录。终端绑定支持用户自助绑定和管理员审批绑定。用户自助绑定是当用户满足自助绑定条件时,可以自行完成绑定流程而无需向管理员申请,而未开启自助绑定方式或不满足自助绑定条件时,用户默认需提交申请理由并等待管理员审批。 一,目前SDK提供两种接入该功能的方式:

  1. 第一种:SDK有内置的授信终端认证处理逻辑,内置展示页面,可以直接使用(默认配置)。
  2. 第二种:UI有自己的需求,需要自己实现UI,这里后面将会介绍使用。

前置步骤

  1. 在实际集成之前,我们要确保已经进行过开发准备
  2. 在控制台创建测试用户,并配置好用户名密码认证+授信终端认证,参考产品手册

集成步骤

流程图

流程图

第一种集成方式:使用SDK内部UI支持授信终端 (无需设置,SDK默认使用内部UI支持授信终端)

使用步骤

注意 如果使用SDK内部UI支持授信终端,如果不使用终端自助绑定中新增认证条件,无需修改代码,只需要控制台启用终端认证即可,默认使用SDK内部UI,注意如下:

  1. 支持横竖屏切换,并且适配Pad
  2. 如果在控制台开启终端认证中自助绑定中的二次认证方式,如sms认证等,需要用户自行处理,展示获取验证码验证界面。

    自助绑定增加自助绑定验证方式

    这是一个需要用户考虑的场景。在控制台中,自助绑定有一个自助绑定验证方式的选项,如果在其中配置了更多的认证方式之后,在满足【自助绑定验证条件】之后会开始配置的认证,这些需要用户自己进行相关处理,如果要实现页面逻辑,也要自行实现,sdk只是会提供一个回调。 比如在【自助绑定验证方式】中用户配置了【短信验证码】,则用户需要在处理这种情况。
    /**
     * 主认证成功,但需要辅助认证(下一步认证)
     *
     * @param nextAuthType 下一步认证类型
     * @param message      下一步认证信息
     */
    @Override
    public void onAuthProgress(SFAuthType nextAuthType, SFBaseMessage message) {
        SFLogN.info(TAG, "need next auth, authType: " + nextAuthType.name());
        dismissWaitingDialog();

        //显示下一步认证UI界面
        showAuthDialog(nextAuthType, message);
    }

3、错误码

75500004           ///< 申请理由不能少于5个字符
75500311           ///< 授信终端已达上限错误
75500312           ///< 开启了终端一对一绑定, 并被他人绑定
75500500           ///< 绑定流程
75500501           ///< 授信终端申请已经提交成功,耐心等待结果
75500502           ///< 终端数据未找到,未环境上报
75500503           ///< 未安装客户端
75500505           ///< 授信终端申请审批已通过,重新开始流程
2207               //认证失败,暂不支持授信终端认证
2208               //用户主动退出授信终端展示页面
2209               //暂不支持终端解绑,请联系管理员进行解绑操作

可以选择性关注这个错误码,会在onAuthFailed回调中返回,在用户主动退出授信终端页面时发送该回调,可以不处理。

下文内容均与用户自定义UI有关,使用SDK内部实现可只需要关注认证成功以下的说明。

第二种集成方式:不使用SDK内部,自己定义UI处理

自定义实现,参照如下配置(可以参考sdk内部展示UI)

SFUemSDK.getInstance().getSFConfig().setOptions(SFSDKOptions.OPTIONS_KEY_TRUST_TERMINAL_SDK,"0");

1、实现主认证

参考典型场景用户名密码认证

2、处理终端认证(参考上面接口设置开关)

首先设置开关关闭,因为SDK默认开关打开

关闭设置,不使用SDK内部UI

    // 设置开关关闭,就是不使用SDK内部授信终端展示UI
SFUemSDK.getInstance().getSFConfig().setOptions(SFSDKOptions.OPTIONS_KEY_TRUST_TERMINAL_SDK,"0");

附:打开设置,使用SDK内部UI(默认配置,无需设置)

    // 设置打开开关,就是使用SDK内部授信终端展示UI
SFUemSDK.getInstance().getSFConfig().setOptions(SFSDKOptions.OPTIONS_KEY_TRUST_TERMINAL_SDK,"1");

如果aTrust身份认证服务器有启用终端认证时,若自助绑定失败或者未开启自助绑定,会进入当前流程,用户名密码认证通过后会执行onAuthProgress回调,并通过nextAuthType参数来判断目前需要申请绑定还是需要解绑。后面会通过例子进行相关nextAuthType介绍。

当调用该回调时,通过传递的message获取相应的数据进行界面填充展示。

3、相关请求

3.1、提交绑定终端申请

doSecondaryAuth接口详情

    @Override
    public void onClick(View v) {
        String reason = mApplyInputText.getText().toString();
        if (TextUtils.isEmpty(reason) || reason.length() < MIN_INPUT_LENGTH || reason.length() >= MAX_INPUT_LENGTH) {
            SFLogN.warn2(TAG, "reason commit failed", "reason length should >= " +MIN_INPUT_LENGTH);
            showToast("申请理由长度必须大于5, 同时不能超过512个字符");
            return;
        }

        Map<String, String> map = new HashMap<>();
        map.put(SFConstants.AUTH_KEY_AUTH_DEVICE_REASON, reason);
        SFUemSDK.getInstance().doSecondaryAuth(mNextAuthType, map);
        finish();
    }

提交绑定终端申请执行之后会执行认证失败的回调。需要根据目前的错误码进行判断是否提交申请成功,当message.errCode为2209时说明提交申请成功, 例如:

    /**
     * 认证失败
     *
     * @param message  认证失败信息
     */
    @Override
    public void onAuthFailed(final SFBaseMessage message) {
        SFLogN.error2(TAG, "auth failed", "errMsg: " + message.toString());
        dismissWaitingDialog();

        //认证失败
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if (message.mErrCode == SFErrorCode.SF_ERROR_BIND_DEVICE_APPLIED.value()) {
                  // 申请成功
                }
            }

                showErrorMessage(message.mErrStr);
            }
        });
    }

3.2、申请终端解绑

sdk目前并不支持用户外部实现终端解绑,参考上面onAuthProcess回调对于SFAuthTypeUnbindAuthDevice这种情况的处理例子(自定义UI处理onAuthProcess),提示建弹窗或者以页面形式告知用户,通过管理员进行解绑。

4、认证成功

主认证和终端认证都成功后,如果没有二次认证,会执行onAuthSuccess回调,至此整个认证流程就结束了

示例代码如下:

    /**
     * 认证成功
     *
     * @param message 认证成功信息
     */
    @Override
    public void onAuthSuccess(final SFBaseMessage message) {
        SFLogN.info(TAG, "auth success");
        dismissWaitingDialog();

        //认证完成,可以跳转认证成功界面
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                showToast(getString(R.string.auth_success));
                finish();
            }
        });
    }

5、认证失败

认证失败的场景包括: 1.提交绑定申请失败(该失败需要自己处理,可以参考例子提交绑定终端申请) 2.用户主动退出授信终端(这个是用户使用sdk内置会触发的回调,上面错误码有介绍


    /**
     * 认证失败
     *
     * @param message  认证失败信息
     */
    @Override
    public void onAuthFailed(final SFBaseMessage message) {
        SFLogN.error2(TAG, "auth failed", "errMsg: " + message.toString());
        dismissWaitingDialog();

        //认证失败
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if (message.mErrCode == 2208) {
                  // 用户主动退出授信终端页面
                }
            }

                showErrorMessage(message.mErrStr);
            }
        });
    }

6、认证中

对于自定义实现的用户,需要处理以下两种状态。

 SFAuthType.AUTH_TYPE_APPLY_BIND_AUTH_DEVICE // 申请绑定授信终端
 SFAuthType.AUTH_TYPE_UNBIND_AUTH_DEVICE // 授信终端解绑

对于自定义实现的用户和使用sdk内置页面的用户,如果控制台增加自助绑定验证方式,比如短信验证码等认证方式,都需要在onAuthProcess自行处理。例子可以参考自助绑定增加自助绑定验证方式该处介绍。

results matching ""

    No results matching ""