场景简介
授信终端认证终端认证常用于限制账号在特定的绑定终端上登录。终端绑定支持用户自主绑定和管理员审批绑定。用户自主绑定是当用户满足自助绑定条件时,可以自行完成绑定流程而无需向管理员申请,而未开启自助绑定方式或不满足自助绑定条件时,用户默认需提交申请理由并等待管理员审批。 一,目前SDK提供两种接入该功能的方式:
- 第一种:SDK有内置的授信终端认证处理逻辑,内置展示页面,可以直接使用(默认配置)。
- 第二种:UI有自己的需求,需要自己实现UI,这里后面将会介绍使用。
前置步骤
集成步骤
流程图
第一种集成方式:使用SDK内部UI支持授信终端 (无需设置,SDK默认使用内部UI支持授信终端)
使用步骤
注意 如果使用SDK内部UI支持授信终端,如果不使用终端自助绑定中新增认证条件,无需修改代码,只需要控制台启用终端认证即可,默认使用SDK内部UI,注意如下:
- 因为当前SDK的授信终端界面的控制器是通过导航push进入,需要注意当前控制器是否支持这种方式
- 支持横竖屏切换,并且适配iPad
- 如果在控制台开启终端认证中自助绑定中的二次认证方式,如sms认证等,需要用户自行处理,展示获取验证码验证界面。
自助绑定增加自助绑定验证方式
这是一个需要用户考虑的场景。在控制台中,自助绑定有一个自助绑定验证方式的选项,如果在其中配置了更多的认证方式之后,在满足【自助绑定验证条件】之后会开始配置的认证,这些需要用户自己进行相关处理,如果要实现页面逻辑,也要自行实现,sdk只是会提供一个回调。 比如在【自助绑定验证方式】中用户配置了【短信验证码】,则用户需要在处理这种情况。 ```objc (void)onAuthProcess:(SFAuthType)nextAuthType message:(BaseMessage *)msg { NSLog(@"SecondAuthViewController onAuthProcess:%ld, msg:%@", (long)nextAuthType, msg.errStr); [MBProgressHUD hideHUDForView:self.view animated:YES];
switch (nextAuthType) {
/** * 比如用户在【自助绑定验证方式】中配置了如下二次认证,则需要在回调中 * 对这个认证类型进行处理,处理逻辑的实现细节由用户自己决定。 */ case SFAuthTypeSMS: // 展示短信验证码弹窗 [self showSMSAuthAlert:(SmsMessage *)msg]; break; // 展示totp radius https认证弹窗 case SFAuthTypeTokenTotp: case SFAuthTypeTokenRadius: case SFAuthTypeTokenHttps: [self showTokenAuthAlert:nextAuthType]; break; // 展示radius认证弹窗 case SFAuthTypeRadius: [self showRadiusAuthAlert:(RadiusMessage *)msg]; break; default: [AlertUtil showAlert:[NSString stringWithFormat:@"暂不支持此种认证类型(%ld)", (long)nextAuthType] message:@"管理员请关掉此认证"]; break;
```
下文内容均与用户自定义UI有关,使用SDK内部实现可只需要关注认证成功以下的说明。
第二种集成方式:不使用SDK内部,自己定义UI处理
自定义实现可以参考sdk内部展示UI,按照2、处理终端认证(参考上面接口设置开关)可以设置成sdk内部展示UI方式。
1、实现用户名密码主认证
参考典型场景用户名密码认证
2、处理终端认证(参考上面接口设置开关)
首先设置开关关闭,因为SDK默认开关打开
关闭设置,不使用SDK内部UI
// 设置开关关闭,就是不使用SDK内部授信终端展示UI
[[SFUemSDK sharedInstance].config setOption:SFSDKOptionUsingSdkTrustDeviceUI value:@"0"];
附:打开设置,使用SDK内部UI(默认配置,无需设置)
// 设置打开开关,就是使用SDK内部的图形验证码
[[SFUemSDK sharedInstance].config setOption:SFSDKOptionUsingSdkTrustDeviceUI value:@"1"];
如果aTrust身份认证服务器有启用终端认证时,若自助绑定失败或者未开启自助绑定,会进入当前流程,用户名密码认证通过后会执行onAuthProgress回调,并通过nextAuthType参数来判断目前需要申请绑定还是需要解绑。后面会通过例子进行相关nextAuthType介绍。
当调用该回调时,通过传递的message获取相应的数据进行界面填充展示。
注意: 如果管理员配置了除终端认证的相关认证(如首次登陆强制修改密码),也会进入到此回调中,此时如果确认不需要支持此二次认证,建议提示用户不支持此认证,让管理员调整配置。
示例代码如下:
/**
* 主认证成功,但需要辅助认证(下一步认证)
*
* @param nextAuthType 下一步认证类型
* SFAuthTypeApplyBindAuthDevice:
* 用户未授信或者用户自助绑定失败之后,会收到这个认证类型,提示用户需要申请绑定。自定义处理需要在这里自行展示页面并发送提交绑定终端申请。
* SFAuthTypeUnbindAuthDevice:
* 用户开启自助绑定开关,满足条件后该用户绑定的设备数量已经超过控制台设置绑定上限,会收到这个认证类型,提示用户需要申请解绑。自定义处理需要在这里自行展示页面并发送解绑终端申请。
* @param msg 下一步认证信息
*
*/
- (void)onAuthProcess:(SFAuthType)nextAuthType message:(BaseMessage *)msg {
NSLog(@"onAuthProcess:%ld, msg:%@", (long)nextAuthType, msg.errStr);
[MBProgressHUD hideHUDForView:self.view animated:YES];
// 需要根据这两种nextAuthType分别进行处理
switch (nextAuthType) {
case SFAuthTypeApplyBindAuthDevice:
[self showTrustDeviceViewControllerWithRandCodeMessage:
(SFBindAuthDeviceMessage*)msg];
break;
case SFAuthTypeUnbindAuthDevice:
[AlertUtil showAlert:[NSString stringWithFormat:@"授信终端数已达最大限制", (long)nextAuthType] message:@"请联系管理员处理"];
break;
default:
[AlertUtil showAlert:[NSString stringWithFormat:@"暂不支持此种认证类型(%ld)", (long)nextAuthType] message:@"管理员请关掉此认证"];
break;
}
}
/// 展示授信终端页面
/// @param msg 授信终端页面消息
- (void)showTrustDeviceViewControllerWithRandCodeMessage:(SFBindAuthDeviceMessage *)msg {
SFApplicantTerminalViewController *applicantTermViewController =
[[SFApplicantTerminalViewController alloc] init];
applicantTermViewController.message = msg;
[self pushToSubViewController:applicantTermViewController animatied:YES];
}
相关需要组装页面的数据可以在SFBindAuthDeviceMessage中拿到,可以将message先转换成SFBindAuthDeviceMessage类型。具体SFBindAuthDeviceMessage数据结构说明可以在代码定义处查看。
3、错误码
#define LOCAL_ERROR_DEVICE_STATUS_TERMINAL_CANCLE_UNBIND = 2208, //用户主动退出授信终端展示页面
可以选择性关注这个错误码,会在onAuthFailed回调中返回,在用户主动退出授信终端页面时发送该回调,可以不处理。
3、相关请求
3.1、提交绑定终端申请
[[SFUemSDK sharedInstance] doSecondaryAuth:SFAuthTypeApplyBindAuthDevice data:@{ kAuthKeyAuthReason: @"部门员工,申请绑定终端" }];
提交绑定终端申请执行之后会执行认证失败的回调。需要根据目前的错误码进行判断是否解绑成功,当message.errCode为2219时说明提交绑定成功。下面会展示出错误码并举例使用。
/** 授信终端 相关错误码*/
/*授信终端 begin*/
#define TrustApplyInnerError 75500004 ///< 申请理由不能少于5个字符
#define DeviceHadExceedTheLimit 75500311 ///< 授信终端已达上限错误
#define DeviceHadBindedToOther 75500312 ///< 开启了终端一对一绑定, 并被他人绑定
#define BindDeviceApplying 75500500 ///< 绑定流程
#define BindDeviceApplied 75500501 ///< 授信终端申请已经提交成功,耐心等待结果
#define DeviceNotFound 75500502 ///< 终端数据未找到,未环境上报
#define DeviceNotInstall 75500503 ///< 未安装客户端
#define BindDeviceApplySuccess 75500505 ///< 授信终端申请审批已通过,重新开始流程
#define LOCAL_ERROR_NOT_SUPPORT_AUTH_TYPE_AUTH_CHECK = 2207, //认证失败,暂不支持授信终端认证
#define LOCAL_ERROR_DEVICE_STATUS_TERMINAL_CANCLE_UNBIND = 2208, //用户主动退出授信终端展示页面
#define LOCAL_ERROR_DEVICE_STATUS_SDK_NOT_SUPPORT_UNBIND = 2209, //暂不支持终端解绑,请联系管理员进行解绑操作
- (void)onAuthFailed:(SFBaseMessage *)message {
/*
* 认证失败场景
*/
UIViewController *curentVC = [UIViewController currentViewController];
if ([curentVC isKindOfClass:[SFApplicantTerminalViewController class]]) {
if (msg.errCode == 75500501) {
// 展示绑定成功页面
[AlertUtil showAlert:@"认证失败" message:[NSString stringWithFormat:@"%@", msg.errStr]];
} else {
// 出现其他错误
[AlertUtil showAlert:@"认证失败" message:[NSString stringWithFormat:@"%@", msg.errStr]];
}
return;
}
// 其他情况
[AlertUtil showAlert:@"认证失败" message:[NSString stringWithFormat:@"%@", msg.errStr]];
}
3.2、申请终端解绑
sdk目前并不支持用户外部实现终端解绑,参考上面onAuthProcess会调用法建议弹窗或者宜页面形式告知用户,通过管理员进行解绑。
4、认证成功
终端认证的认证成功场景集中为自助绑定成功之后能够上线,没有其他场景会有认证成功的回调。用户自定义处理UI的场景也不需要额外考虑认证成功的情况。
5、认证失败
认证失败的场景包括: 1.提交绑定申请失败(该失败需要自己处理,可以参考例子提交绑定终端申请) 2.用户主动退出授信终端(这个是用户使用sdk内置)
6、认证中
对于自定义实现的用户,需要处理上面说到的SFAuthTypeApplyBindAuthDevice、SFAuthTypeUnbindAuthDevice两种状态。 对于自定义实现的用户和使用sdk内置页面的用户,如果控制台增加自助绑定验证方式,比如totp,sms验证码等认证方式,都需要在onAuthProcess自行处理。例子可以参考自助绑定增加自助绑定验证方式该处介绍。