场景简介
授信终端认证终端认证常用于限制账号在特定的绑定终端上登录。终端绑定支持用户自助绑定和管理员审批绑定。用户自助绑定是当用户满足自助绑定条件时,可以自行完成绑定流程而无需向管理员申请,而未开启自助绑定方式或不满足自助绑定条件时,用户默认需提交申请理由并等待管理员审批。 一,目前SDK提供两种接入该功能的方式:
- 第一种:SDK有内置的授信终端认证处理逻辑,内置展示页面,可以直接使用(默认配置)。
- 第二种:UI有自己的需求,需要自己实现UI,这里后面将会介绍使用。
前置步骤
集成步骤
流程图
第一种集成方式:使用SDK内部UI支持授信终端 (无需设置,SDK默认使用内部UI支持授信终端)
使用步骤
注意 如果使用SDK内部UI支持授信终端,如果不使用终端自助绑定中新增认证条件,无需修改代码,只需要控制台启用终端认证即可,默认使用SDK内部UI,注意如下:
- 支持横竖屏切换,并且适配Pad
- 如果在控制台开启终端认证中自助绑定中的二次认证方式,如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、提交绑定终端申请
@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);
/**
* 绑定终端申请
* @param authType
* mNextAuthType = SFAuthType.AUTH_TYPE_APPLY_BIND_AUTH_DEVICE
* @param authInfo
* map.put(SFConstants.AUTH_KEY_AUTH_DEVICE_REASON, reason);
* @return
*/
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自行处理。例子可以参考自助绑定增加自助绑定验证方式该处介绍。