场景简介

辅助认证多选一是辅助认证的扩展场景,管理员可以在控制台配置多个辅助认证,用户根据自身情况选择合适的辅助认证进行认证,使得用户有更加灵活的方式进行认证,同时也可以轻松处理有国内和国际短信网关的场景,有需求时参考MainApp中的SecondAuthViewController实现。

前置步骤

在实际集成之前,我们要确保已经进行过开发准备

流程图

流程图

集成步骤

1、实现用户名密码主认证

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

2、处理二次认证-辅助认证多选一

doSecondaryAuth接口详情

如果aTrust身份认证服务器有启用短信认证时会进入当前流程,用户名密码认证通过后会执行onAuthProgress回调,并通过nextAuthType参数告知需要二次认证的类型为短信认证。 当调用该回调时,如果msg中nextServiceList数组中存在一个以上的对象,说明此时是辅助认证多选一的场景,所以此时需要创建辅助认证多选一的UI界面给用户进行选择,例如用户选择的是短信二次认证,则调用二次认证接口完成二次认证。

注意:如果管理员配置了除短信验证码以外的二次认证方式(如首次登陆强制修改密码),也会进入到此回调中,此时如果确认不需要支持此二次认证,建议提示用户不支持此认证,让管理员调整配置

示例代码如下:

/**
 * 主认证成功,但需要辅助认证(下一步认证)
 *
 * @param nextAuthType 下一步认证类型
 * @param msg  下一步认证信息
 */
- (void)onAuthProcess:(SFAuthType)nextAuthType message:(BaseMessage *)msg {
    if (msg.nextServiceList.count > 1) { // 辅助认证多选一
        self.baseMessage = msg;
        [self.view addSubview:self.tableView];
        [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.center.equalTo(self.view);
            make.width.equalTo(@200);
            make.height.equalTo(@400);
        }];
        [self.tableView reloadData];
        return;
    }
    switch (nextAuthType) {
        case SFAuthTypeSMS:
            // 处理短信主认证的一些逻辑,如显示验证码输入框
            [self showSMSAuthAlert:(SmsMessage *)msg];
            break;
        default:
                /**
                * 服务端配置了首次登陆强制修改密码,或者其他非短信验证码二次认证类型时,认证时也会回调此方法,
                * 此时如果不打算适配此类型二次认证,建议给用户提示,让管理员调整配置
                */
            [AlertUtil showAlert:[NSString stringWithFormat:@"暂不支持此种认证类型(%ld)", (long)nextAuthType] message:@"管理员请关掉此认证"];
            break;
    }
}

#pragma mark - UITableViewDelegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    SFServiceInfo *serviceInfo = self.baseMessage.nextServiceList[indexPath.row];
    SFAuthType nextAuthType = serviceInfo.authType;
    NSString *authId = serviceInfo.authId;
    switch (nextAuthType) {
        case SFAuthTypeSMS:
            {
                SmsMessage *msg = [[SmsMessage alloc] init];
                [self showSMSAuthAlert:(SmsMessage *)msg authId:authId];
            }
            break;
        default:
            [AlertUtil showAlert:[NSString stringWithFormat:@"暂不支持此种认证类型(%ld)", (long)nextAuthType] message:@"管理员请关掉此认证"];
            break;
    }
    [tableView removeFromSuperview];
}

/**
 * 调用短信辅认证,输入参数为短信验证码,以及辅助认证唯一标识authId
 */
[[SFUemSDK sharedInstance] doSecondaryAuth:SFAuthTypeSMS data:@{kAuthKeySMS:code, kAuthKeySecondAuthId:authId}];

3、认证成功

主认证和二次认证都成功后,会执行onAuthSuccess回调,至此整个认证流程就结束了,认证成功后,应用就可以正常的访问aTrust管理员配置的内网服务器资源, 执行业务代码

示例代码如下:

   /**
    * 认证成功的回调
    * @param msg 认证成功的信息
    */
- (void)onAuthSuccess:(BaseMessage *)msg {
    //认证成功的业务
}

4、认证失败

如果有认证失败的情况,会执行onAuthFailed回调, 在该回调中提示用户,重新开始认证

示例代码如下:

/**
 * 认证失败的回调
 *
 * @param msg 错误信息
 */
- (void)onAuthFailed:(BaseMessage *)msg {
    // 重新开始认证或者其他逻辑
}

5、重新获取验证码

regetSmsCode接口详情

短信验证码有效期可以通过onAuthProgress中的参数message(参考SFSmsMessage)来获取,短信验证码失效后,可以调用接口重新获取

示例代码如下:

 /**
  * 短信验证码过期后,需要调用重新获取短信验证码
  * 辅助认证多选一的场景下,需要传入辅助认证的authId
  */
[[SFUemSDK sharedInstance].auth regetSmsWithAuthId:authId Code:^(SFSmsMessage * _Nullable message, NSError * _Nullable error) {
    if (!error) {
        //重新获取短信验证码成功
    }
}];

results matching ""

    No results matching ""