场景简介

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

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

前置步骤

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

集成步骤

流程图

流程图

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

使用步骤

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

  1. 因为当前SDK的授信终端界面的控制器是通过导航push进入,需要注意当前控制器是否支持这种方式
  2. 支持横竖屏切换,并且适配iPad
  3. 如果在控制台开启终端认证中自助绑定中的二次认证方式,如sms认证等,需要用户自行处理,展示获取验证码验证界面。

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

    这是一个需要用户考虑的场景。在控制台中,自助绑定有一个自助绑定验证方式的选项,如果在其中配置了更多的认证方式之后,在满足【自助绑定验证条件】之后会开始配置的认证,这些需要用户自己进行相关处理,如果要实现页面逻辑,也要自行实现,sdk只是会提供一个回调。 比如在【自助绑定验证方式】中用户配置了【短信验证码】,则用户需要在处理这种情况。 ```objc
  4. (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、提交绑定终端申请

doSecondaryAuth接口详情

[[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自行处理。例子可以参考自助绑定增加自助绑定验证方式该处介绍。

results matching ""

    No results matching ""